文章目录
  1. 1. 原由
  2. 2. 安装
  3. 3. 配置
  4. 4. 切换nginx命令与服务
    1. 4.0.1. 命令
    2. 4.0.2. 服务
  • 5. 其他
  • 原由

    为了监控nginx服务器的upstream,如tomcat的状态,给nginx服务器添加nginx_upstream_check_module

    安装

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    wget http://nginx.org/download/nginx-1.8.0.tar.gz
    tar xzvf nginx-1.8.0.tar.gz
    wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/master.zip
    unzip master.zip
    cd nginx-1.8.0
    patch -p1 < ../nginx_upstream_check_module-master/check_1.7.5+.patch
    ./configure --add-module=../nginx_upstream_check_module-master/
    make && sudo make install

    配置

    默认没有conf.d文件夹,手动建一个,并且在nginx.conf文件中的server directive前加上

    1
    include /usr/local/nginx/conf/conf.d/*.conf;

    conf.d/tomcat.conf

    1
    2
    3
    4
    5
    upstream tomcat {
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
    check interval=5000 rise=1 fall=3 timeout=4000;
    }

    conf.d/xxx.com.conf

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    server {
    listen 80;
    server_name xxx.com;
    location / {
    proxy_pass http://tomcat;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    location /status {
    check_status;
    access_log off;
    allow 127.0.0.1;
    deny all;
    }
    }

    切换nginx命令与服务

    命令

    安装后的位置在/usr/local/nginx/sbin/nginx。 如果想无缝切换的话,可以直接把原来的nginx命令备份后,用新的nginx命令覆盖旧的。然后参考这个教程无缝切换。在CentOS 6.x上也可以使用service nginx upgrade命令来做,原理是一样的。 否则继续往下走。

    服务

    • CentOS 7.x

      1
      2
      sudo cp /usr/lib/systemd/system/nginx.service /usr/lib/systemd/system/nginx_patched.service
      sudo vim /usr/lib/systemd/system/nginx_patched.service

      修改部分内容如下:

      1
      2
      3
      4
      PIDFile=/run/nginx_patched.pid
      ExecStartPre=/usr/bin/rm -f /run/nginx_patched.pid
      ExecStartPre=/usr/local/nginx/sbin/nginx -t
      ExecStart=/usr/local/nginx/sbin/nginx

    • CentOS 6.x

      1
      2
      sudo cp /etc/init.d/nginx /etc/init.d/nginx_patched
      sudo vim /etc/init.d/nginx_patched

      修改部分内容如下:

      1
      2
      3
      4
      5
      6
      7
      8
      # config: /usr/local/nginx/conf/nginx.conf
      # config: /etc/sysconfig/nginx_patched
      # pidfile: /var/run/nginx_patched.pid
      nginx="/usr/local/nginx/sbin/nginx"
      sysconfig="/etc/sysconfig/${prog}_patched"
      lockfile="/var/lock/subsys/nginx_patched"
      pidfile="/var/run/${prog}_patched.pid"
      NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"

      修改/etc/sysconfig/nginx_patched部分内容如下:

      1
      NGINX_CONF_FILE=/usr/local/nginx/conf/nginx.conf

      停止原有的nginx服务:

    • CentOS 7.x

      1
      2
      /usr/bin/systemctl stop nginx.service
      /usr/bin/systemctl disable nginx.service

    • CentOS 6.x

      1
      2
      /sbin/service nginx stop
      /sbin/chkconfig nginx off

      开启新的nginx服务:

    • CentOS 7.x

      1
      2
      /usr/bin/systemctl start nginx_patched.service
      /usr/bin/systemctl enable nginx_patched.service

    • CentOS 6.x

      1
      2
      3
      /sbin/chkconfig --add nginx_patched
      /sbin/service nginx_patched start
      /sbin/chkconfig nginx_patched on

    其他

    如果不想自己重新用源码打patch,再编译安装的话,可以尝试下Tengine,自带了health check 模块。 如果不用health check模块的话,退一步,可以这样:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    location / {
    proxy_pass http://tomcat;
    proxy_redirect off;
    proxy_next_upstream error timeout invalid_header http_500;
    proxy_connect_timeout 2;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    这样也可以实现负载均衡,当有一台tomcat当机后,请求会自动转到剩余可有的tomcat上,但有个孬处是,当当掉的tomcat启来后,nginx无法自动获知到,有新的upstream可用,这时就需要手动reload nginx,对线上请求会有波动影响。推荐还是使用health check模块。

    文章目录
    1. 1. 原由
    2. 2. 安装
    3. 3. 配置
    4. 4. 切换nginx命令与服务
      1. 4.0.1. 命令
      2. 4.0.2. 服务
  • 5. 其他