官网下载(1MB左右):下载地址

  1. 选择稳定版本下载
  2. NGINX的集群部署_centos

  3. 安装
    将下载好的安装包上传到linux,然后解压

解压 # tar -zxvf nginx-1.18.2.tar.gz

  1. 进入解压后的文件,自动配置

./configure

  1. 执行结束后

make

  1. 然后

make install

  1. 查看 nginx

whereis nginx

  • 常用命令:

./nginx -c nginx.conf启动

./nginx -s -stop 停止

./nginx -s quit 安全退出

./nginx -s reload 重新加载配置文件

ps aux|grep nginx 查看nginx进程

使用nginx

  • 默认使用80端口,可在/usr/local/nginx/conf/nginx.conf 文件修改
  • 访问

配置文件详解

  • 全局块:从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令

worker_processes 1; 值越大,可以支持的并发量就越大

  • events块:主要影响 nginx 服务器与用户的网络连接

worker_connections 1024; #支持的最大连接数

  • http块:配置的指令包括文件引入、MIME-TYPE 定义,日志定义、连接超时时间、单链接请求数上限等

负载均衡策略

  1. 轮询(默认):每个请求按时间逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动删除
upstream cluster{
        server 127.0.0.1:3333;
        server 127.0.0.1:4444;
        server 127.0.0.1:5555;
    }
  1. weight:权重,默认为1,权重越高被分配的客户越多
upstream cluster{
        server 127.0.0.1:3333  weight=5;
        server 127.0.0.1:4444  weight=10;
        server 127.0.0.1:5555  weight=100;
    }
  1. ip_hsah:每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题
upstream cluster{
		ip_hash;
        server 127.0.0.1:3333;
        server 127.0.0.1:4444;
        server 127.0.0.1:5555;
    }
  1. fair(第三方):按后端服务器的响应时间来分配请求,响应时间越短则优先分配
upstream cluster{
        server 127.0.0.1:3333;
        server 127.0.0.1:4444;
        server 127.0.0.1:5555;
        fair;
    }

Nginx配置:动静分离

动静分离:简单的来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是把动态请求和静态请求分开,可以理解成使用 Nginx 处理静态页面,Tomcat 处理动态页面。

NGINX的集群部署_java_02

Nginx高可用集群

  1. 什么是 nginx 高可用
  2. NGINX的集群部署_NGINX的集群部署_03

  3. 准备工作:
  • 两台服务器:192.168.17.135 和 192.168.17.131
  • 两台服务器安装 nginx
  • 安装 openssl、zlib、gcc依赖

yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

  • 两台服务器安装 keeplived
  • yum 安装

yum install keepalived -y
安装的位置: /etc/keepalived

  • 完成高可用配置(主从配置)
  1. 修改 /etc/keepalived/keepalived.conf 配置文件
  2. 在 /usr/local/src 添加检测脚本
# ! /bin/bash
A='ps -C nginx -no-header |wc -1'
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ 'ps -C nginx --no-header | wc -1' -eq 0 ];then
        killall keepalived
    fi
fi
  1. 启动 nginx 和 keepalived

nginx启动:/usr/local/nginx/sbin/nginx
keepalived启动:systemctl start keepalived.service

配置文件

nginx.conf

#user  nobody;
	worker_processes  1;
	
	#error_log  logs/error.log;
	#error_log  logs/error.log  notice;
	#error_log  logs/error.log  info;
	
	#pid        logs/nginx.pid;
	
	
	events {
	    worker_connections  1024;
	}
	
	
	http {
	    include       mime.types;
	    default_type  application/octet-stream;
	
	    #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  logs/access.log  main;
	
	    sendfile        on;
	    #tcp_nopush     on;
	
	    #keepalive_timeout  0;
	    keepalive_timeout  65;
	
	    #gzip  on;
	    
	    upstream cluster{
	        server 127.0.0.1:3333;
	        server 127.0.0.1:4444;
	        server 127.0.0.1:5555;
	    }
	    server {
	        listen       80;
	        server_name  localhost;
	
	        #charset koi8-r;
	
	        #access_log  logs/host.access.log  main;
	
	        location / {
	            # root   html;
	            # index  index.html index.htm;
	        
	            proxy_pass http://cluster;
	        }
	        
	        location ~ /test/ {
	            # root   html;
	            # index  index.html index.htm;
	        
	            proxy_pass http://www.bilibili.com;
	        }
	
	        #error_page  404              /404.html;
	
	        # redirect server error pages to the static page /50x.html
	        #
	        error_page   500 502 503 504  /50x.html;
	        location = /50x.html {
	            root   html;
	        }
	
	        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
	        #
	        #location ~ \.php$ {
	        #    proxy_pass   http://127.0.0.1;
	        #}
	
	        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
	        #
	        #location ~ \.php$ {
	        #    root           html;
	        #    fastcgi_pass   127.0.0.1:9000;
	        #    fastcgi_index  index.php;
	        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
	        #    include        fastcgi_params;
	        #}
	
	        # deny access to .htaccess files, if Apache's document root
	        # concurs with nginx's one
	        #
	        #location ~ /\.ht {
	        #    deny  all;
	        #}
	    }
	
	
	    # another virtual host using mix of IP-, name-, and port-based configuration
	    #
	    #server {
	    #    listen       8000;
	    #    listen       somename:8080;
	    #    server_name  somename  alias  another.alias;
	
	    #    location / {
	    #        root   html;
	    #        index  index.html index.htm;
	    #    }
	    #}
	
	
	    # HTTPS server
	    #
	    #server {
	    #    listen       443 ssl;
	    #    server_name  localhost;
	
	    #    ssl_certificate      cert.pem;
	    #    ssl_certificate_key  cert.key;
	
	    #    ssl_session_cache    shared:SSL:1m;
	    #    ssl_session_timeout  5m;
	
	    #    ssl_ciphers  HIGH:!aNULL:!MD5;
	    #    ssl_prefer_server_ciphers  on;
	
	    #    location / {
	    #        root   html;
	    #        index  index.html index.htm;
	    #    }
	    #}
	
	}

keepalived.conf

! Configuration File for keepalived

global_defs {   # 全局定义
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   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 "/usr/local/src/nginx_check.sh"
    
    interval 2  #(检测脚本执行的间隔)
    
    weight  2
    
}

vrrp_instance VI_1 {
    state MASTER            # 备份服务器上将 MASTER 改为 BACKUP
    interface eth0          # 网卡
    virtual_router_id 51    # 主、备机的 virtual_router_id 必须相同
    priority 100            # 主、备机取不同的优先级,主机值较大,备份机值较小
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.16      # 虚拟ip
        192.168.200.17
        192.168.200.18
    }
}

virtual_server 192.168.200.100 443 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.201.100 443 {
        weight 1
        SSL_GET {
            url {
              path /
              digest ff20ad2481f97b1754ef3e12ecd3a9cc
            }
            url {
              path /mrtg/
              digest 9b3a0c85a887a256d6939da88aabd8cd
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

virtual_server 10.10.10.2 1358 {
    delay_loop 6
    lb_algo rr 
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    sorry_server 192.168.200.200 1358

    real_server 192.168.200.2 1358 {
        weight 1
        HTTP_GET {
            url { 
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.200.3 1358 {
        weight 1
        HTTP_GET {
            url { 
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c
            }
            url { 
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

virtual_server 10.10.10.3 1358 {
    delay_loop 3
    lb_algo rr 
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.200.4 1358 {
        weight 1
        HTTP_GET {
            url { 
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.200.5 1358 {
        weight 1
        HTTP_GET {
            url { 
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}