Nginx健康检查7层 安装淘宝nginx_upstream_check_module模块

使用淘宝第三方模块nginx_upstream_check_module进行健康检查时,nginx安装不能使用yum直接安装,需要下载nginx源码包进行编译安装。以下是具体的安装步骤,直接复制,粘贴即可

•	wget http://nginx.org/download/nginx-1.14.2.tar.gz     //下载你需要版本的nginx源码包
•   tar -zxvf nginx-1.14.2.tar.gz
•	mv /root/nginx-1.14.2 /usr/local/src
•	cd /usr/local/src/nginx-1.14.2
•	mkdir -p /etc/nginx/
•	./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --with-http_stub_status_module --with-http_ssl_module --with-file-aio --with-http_realip_module
   (如果出现错误./configure: error: the HTTP rewrite module requires the PCRE library. 命令行执行 yum -y install pcre-devel openssl openssl-devel)
•	make & make install
•	nginx -v   //查看版本
•   nginx -V   //查看版本以及已安装的模块。重新编译的时候,需要知道之前的模块

•	wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/master.zip   //下载淘宝健康检查模块
•	unzip master.zip
•	mv nginx_upstream_check_module-master nginx_http_upstream_check_module
•	cd /usr/local/src/nginx-1.14.2
•   patch -p1 < /usr/local/src/nginx_http_upstream_check_module/check_1.14.0+.patch    
    安装对应版本的补丁( cd /usr/local/src/nginx_http_upstream_check_module可以自己查看自己下载的nginx版本支持哪些版本的补丁,补丁版本不一定要与nginx版本号一样)
•	./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --with-http_stub_status_module --with-http_ssl_module --with-file-aio --with-http_realip_module
--add-module=/usr/local/src/nginx_http_upstream_check_module
•	make && make install
•	cp objs/nginx /usr/sbin/nginx     //覆盖原来的nginx二进制文件

安装完成之后
nginx.conf所在目录为 /etc/nginx/nginx.conf
测试是否安装成功
1,测试nginx是否安装成功
curl ip:80 是否出现nginx的欢迎页面 ,或者浏览器http://ip是否出现欢迎页面。
如果出现则nginx功能成功
2,测试健康检查模块是否安装成功
健康检查配置如下

 upstream listener-00_pool {
           server 10.11.11.11:8080;
           server 10.11.22.22:80;
           
           //健康检查配置,具体每个变量代表什么意思可百度去查,不再赘述。
           check interval=3000 rise=2 fall=3 timeout=2000;
           check_http_send "HEAD / HTTP/1.1\r\nConnection: keep-alive\r\n\r\n";
           check_http_expect_alive http_2xx http_3xx;
    }
    server {
       listen 172.17.17.17:80;
       server_name healthy check;

        location / {
            proxy_pass http://listener-00_pool;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            root   html;
            index  index.html index.htm;
        }
        //健康检查配置,配置完以后可进行访问,显示后端server池中server的健康状态
          location /nstatus {
            check_status;    //匹配url,使用check_status指令
            access_log off;   //不开启访问日志
       }
  }

配置完成
首先,保存配置文件 nginx -t看是否有误,没有问题之后,nginx -s reload 重新加载配置
然后,curl进行访问
[root@compute ~]# curl http://172.17.17.17:80/nstatus?format=json

{"servers": {
  "total": 5,
  "generation": 2,
  "server": [
    {"index": 0, "upstream": "listener-01159_pool", "name": "10.120.22.22:8080", "status": "up", "rise": 4778, "fall": 0, "type": "tcp", "port": 0},
    {"index": 1, "upstream": "listener-01159_pool", "name": "10.140.33.33:80", "status": "down", "rise": 0, "fall": 32003, "type": "tcp", "port": 0},
    {"index": 2, "upstream": "listener-00_pool", "name": "10.11.44.44:8080", "status": "up", "rise": 0, "fall": 32061, "type": "tcp", "port": 0},
    {"index": 3, "upstream": "listener-8008_pool", "name": "10.130.55.55:3", "status": "up", "rise": 0, "fall": 31954, "type": "tcp", "port": 0},
    {"index": 4, "upstream": "listener-8008_pool", "name": "10.19.66.66:80", "status": "down", "rise": 0, "fall": 16723, "type": "tcp", "port": 0}
  ]
}}

有三种显示格式 考虑到获取健康检查后要对数据进行处理,所以选择json格式
format=html//默认显示的格式。
format=csv
format=json
”up“为可用, “down”为不可用
如果可以访问成功则nginx健康检查模块配置成功。

其他问题
1.配置中配置http协议时,访问时为curl http://172.17.17.17:80/nstatus?format=json
2.配置中配置https协议且为单向ssl认证时,访问时为curl -k http://172.17.17.17:80/nstatus?format=json 其中“-k”为忽略证书验证
3.配置中配置https协议且为双向ssl认证时,访问时一直有误,提示缺少客户端证书,未解决。
4.如果nginx.conf中有多个监听器时,访问一个监听器,其他监听器下配置健康检查的后端server也会出现(https双向ssl认证下的也会出现)
例如上图中只是查看的监听器listener-01159_pool下的upstream中的server,但是监听器listener-00_pool,listener-8008_pool下的upstream中的server的健康状态都一起查出来了。

你可能感兴趣的:(Nginx和Tengine)