nginx学习

nginx 学习
  • 反向代理
  • 负载均衡
  • 动静分离
反向代理

正向代理 客户端通过代理服务器访问网络 称之为正向代理
反向代理 通过反向代理服务器 转发到真正的服务器 可以隐藏真实服务器
负载均衡 客户端发送请求到反向代理服务器 反向代理服务器平均分配请求到多台服务器
动静分离 把动态页面和静态页面分开进行部署

安装nginx

sudo yum install epel-release
sudo yum install nginx
关闭防火墙

nginx常用命令

ps -ef | grep nginx 查看nginx进程
nginx -v 查看版本号
nginx -s stop 关闭命令
nginx -s reload 重启命令

nginx配置文件

配置文件由三部分组成

第一部分 全局块

从配置文件到 events之间的内容

user nginx;
worker_processes auto; //并发量
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
第二部分 events

nginx支持的最大连接数 worker_connections 服务器与用户网络连接部分

events {
    worker_connections 1024;
}
第三部分 大多数功能和配置 http块
http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        }

        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }

# Settings for a TLS enabled server.
#
#    server {
#        listen       443 ssl http2 default_server;
#        listen       [::]:443 ssl http2 default_server;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        ssl_certificate "/etc/pki/nginx/server.crt";
#        ssl_certificate_key "/etc/pki/nginx/private/server.key";
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers HIGH:!aNULL:!MD5;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        location / {
#        }
#
#        error_page 404 /404.html;
#        location = /404.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#        location = /50x.html {
#        }
#    }

}

http全局块
server部分 和虚拟主机有密切关系 全局server

nginx 配置实例-反向代理 tomcat

安装tomcat 解压并cd cd apache-tomcat-7.0.106/bin
执行 ./startup.sh 查看tomcat服务状态http://192.168.0.126:8080/

server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  **192.168.0.126**;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
          **proxy_pass http://127.0.0.1:8080;**
        }

        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }
根据不同路径跳转不同tomcat

(1)准备两个tomcat 一个是8080 一个是8081 cd /conf 修改server.xml
(2)创建不同的页面 在webapps中加入文件html
http://192.168.0.126:8081/vod/a.html
http://192.168.0.126:8080/edu/a.html

http://192.168.0.126:9001/edu/a.html
http://192.168.0.126:9001/vod/a.html
 server {
        listen       9001;
        server_name  192.168.0.126;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location ~ /edu/ {
          proxy_pass http://127.0.0.1:8080;
        
        }
     location ~ /vod/ {
          proxy_pass http://127.0.0.1:8081;

        }
        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }

nginx配置实例 负载均衡

(1)准备两台tomcat 端口分别为8080 和 8081
(2)创建 edu分别放入两个不同的html
在http中加上服务列表

upstream myserver {
server 192.68.0.126:8080;
server 192.168.0.126:8081;
}
    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  192.168.0.126;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
          proxy_pass http://myserver;
        }

        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }

nginx 分配策略

  • 默认轮询
  • 权重分配
upstream myserver {
server 192.68.0.126:8080 widget=1;
server 192.168.0.126:8081 widget=2;
}
  • ip_hash 每个服务器访问同一个服务 不存在session问题
upstream myserver {
ip_hash
server 192.68.0.126:8080 ;
server 192.168.0.126:8081;
}
  • fair 根据请求时间进行分配
nginx配置实例-动静分离

动态请求 静态请求 静态资源服务器 nginx 通过分离动静请求到不同的服务器
一种方式是使用动态和静态服务器分开 一种是使用nginx location属性进行动静分离
通过expires 参数设置,可以设置浏览器缓存时间。
创建 www和img文件夹
use root
配置不同的访问地址

      location /www/ {
          autoindex on;
          root /root/home/data/;
        }

   location /img/ {
          autoindex on;
          root /root/home/data/;
        }
nginx 高可用

通过两台nginx服务器 主从模式 keepalived 进行监控切换 虚拟ip
准备工作
(1) 需要两个虚拟机环境 192.168.17.126 和 192.168.17.127
(2) 安装nginx 在两台服务器中安装 keepalived 使用yum命令安装
yum install keepalived -y
修改 /etc/keepalived/keepalived.conf 配置

keepalived 文件配置

在 /etc/hosts 中添加 127.0.0.1 LVS_DEVEL

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL //服务器别名
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script chk_http_port {
   script "/etc/keepalived/nginx_check.sh"
   interval 2
   widget 2 //nginx权重
}

vrrp_instance VI_1 {
    state MASTER  //主服务
    interface eth0
    virtual_router_id 51 //主备机id必须相同
    priority 100 //优先级
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.17.50
    }
}
ps aux ¦ grep nginx ¦ grep -v grep 2> /dev/null 1>&2   # 过滤nginx进程
if [[ $? -eq 0 ]]               # 如果过滤有nginx进程会返回0则认为nginx存活
then
    sleep 5                     # 使脚本进入休眠
else
# 如果nginx没有存活尝试启动nginx,如果失败则杀死keepalived的进程
    /usr/sbin/nginx
    ps aux ¦ grep nginx ¦ grep -v grep 2> /dev/null 1>&2
    if [[ $? -eq 0 ]]
    then
        pkill keepalived
    fi
fi
nginx原理解析

master和worker进程 nginx启动以后会有两个进程
worker是如何进行工作的 多个worker来争抢任务
一个master 和多个worker的优点
可以使用热部署 nginx -s reload
每个worker都是独立进程 不需要加锁 相互之间不会影响 并降低服务中断的危险
io 多路复用机制 worker数一般和cpu数量最好是相等的
最大并发数 连接数 乘以 worker数 除以 2 或者 4

你可能感兴趣的:(nginx)