• Nginx在已经安装好的Nginx上增加新模块不重启生效


    Nginx在已经安装好的Nginx上增加新模块不重启生效

    以同时添加echo模块以及nginx-module-vts模块为例子。

    下载:echo模块 nginx-module-vts模块

    文件:echo-nginx-module-0.62.tar.gz、nginx-module-vts-0.1.18.tar.gz

    查看已安装的模块

    1.查看默认安装模块。

    cat /soft/nginx-1.20.1/auto/options | grep YES

    2.编译时附带的可选模块或三方模块

    nginx -V
    nginx version: nginx/1.20.1
    built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
    built with OpenSSL 1.1.1k  25 Mar 2021
    TLS SNI support enabled
    configure arguments: --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --pid-path=/usr/local/nginx/logs/nginx.pid --with-http_gzip_static_module --with-http_stub_status_module --with-file-aio --with-http_realip_module --with-http_ssl_module --with-pcre=/soft/pcre-8.45 --with-zlib=/soft/zlib-1.2.11 --with-openssl=/soft/openssl-1.1.1k

    解压

    tar -zxvf echo-nginx-module-0.62.tar.gz
    tar -zxvf nginx-module-vts-0.1.18.tar.gz 

    添加新的模块,生成Makefile

    进入原来安装nginx的安装包(若已删除,则重新下载与当前nginx版本一致的安装包)。

    记得带上以上nginx -V中的原始配置。

    [root@dm8 soft]# cd nginx-1.20.1
    [root@dm8 nginx-1.20.1]# ./configure --add-module=/soft/nginx-module-vts-0.1.18 --add-module=/soft/echo-nginx-module-0.62 --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --pid-path=/usr/local/nginx/logs/nginx.pid --with-http_gzip_static_module --with-http_stub_status_module --with-file-aio --with-http_realip_module --with-http_ssl_module --with-pcre=/soft/pcre-8.45 --with-zlib=/soft/zlib-1.2.11 --with-openssl=/soft/openssl-1.1.1k

    编译

    make

    千万不要执行make install,会覆盖原来的nginx文件。

    备份并替换nginx可执行文件

    [root@dm8 nginx-1.20.1]# mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
    [root@dm8 nginx-1.20.1]# cp objs/nginx /usr/local/nginx/sbin/

    查看master进程号并开始热部署

    [root@dm8 logs]# cat nginx.pid 
    740
    或者
    [root@dm8 logs]# ps -ef | grep nginx
    root        740      1  0 00:04 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
    nobody      742    740  0 00:04 ?        00:00:00 nginx: worker process
    root      17497   1660  0 01:32 pts/1    00:00:00 grep --color=auto nginx

    告诉nginx开始热部署,并且新启一个master(用新的nginx),但是老的worker也在运行,新的master也会生成新的worker。新的请求只会进去新的worker。

    [root@dm8 logs]# kill -USR2 740
    [root@dm8 logs]# ps -ef | grep nginx
    root        740      1  0 00:04 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
    nobody      742    740  0 00:04 ?        00:00:00 nginx: worker process
    root      17494    740  0 01:32 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
    nobody    17495  17494  0 01:32 ?        00:00:00 nginx: worker process
    root      17497   1660  0 01:32 pts/1    00:00:00 grep --color=auto nginx

    告诉老的master进程,请优雅的关闭worker进程,不过老的master进程是不会关闭的,为回退做准备。

    [root@dm8 logs]# kill -WINCH 740
    [root@dm8 logs]# ps -ef | grep nginx
    root        740      1  0 00:04 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
    root      17494    740  0 01:32 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
    nobody    17495  17494  0 01:32 ?        00:00:00 nginx: worker process
    root      17500   1660  0 01:33 pts/1    00:00:00 grep --color=auto nginx
    [root@dm8 logs]# ll
    total 24
    -rw-r--r-- 1 root root 8238 Aug 29 01:34 access.log
    -rw-r--r-- 1 root root 1115 Aug 29 01:32 error.log
    -rw-r--r-- 1 root root    6 Aug 29 01:32 nginx.pid
    -rw-r--r-- 1 root root    4 Aug 28 19:50 nginx.pid.oldbin
    [root@dm8 logs]# cat nginx.pid
    17494
    [root@dm8 logs]# cat nginx.pid.oldbin
    740

    确定不需要回退则关闭老的master进程

    优雅的停止,处理完已经接受的请求, 相当于nginx -s quit。

    [root@dm8 logs]# ps -ef | grep nginx
    root        740      1  0 00:04 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
    root      17494    740  0 01:32 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
    nobody    17495  17494  0 01:32 ?        00:00:00 nginx: worker process
    root      17511   1660  0 01:48 pts/1    00:00:00 grep --color=auto nginx
    [root@dm8 logs]# kill -QUIT 740
    [root@dm8 logs]# ps -ef | grep nginx
    root      17494      1  0 01:32 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
    nobody    17495  17494  0 01:32 ?        00:00:00 nginx: worker process
    root      17514   1660  0 01:51 pts/1    00:00:00 grep --color=auto nginx
    [root@dm8 logs]# ll
    total 20
    -rw-r--r-- 1 root root 8238 Aug 29 01:34 access.log
    -rw-r--r-- 1 root root 1115 Aug 29 01:32 error.log
    -rw-r--r-- 1 root root    6 Aug 29 01:32 nginx.pid

    如果需要回退

    1. cp -f nginx.bak nginx
    2. kill -HUP 旧版本的进程号 (拉起旧版本的worker进程)
    3. kill -WINCH 新版本的主进程号 (关闭新版本的worker进程)
    4. kill -QUIT 新版本的主进程号

    参考链接

    https://www.pianshen.com/article/4858354178/

  • 相关阅读:
    kuangbin专题最短路 D
    AC日记——总分 Score Inflation 洛谷 P2722
    AC日记——[USACO09OCT]Bessie的体重问题Bessie's We… 洛谷 P2639
    AC日记——[USACO07DEC]手链Charm Bracelet 洛谷 P2871
    AC日记——[JLOI2014]松鼠的新家 洛谷 P3258
    AC日记——小行星 洛谷 P2711
    AC日记——[USACO09JAN]全流Total Flow 洛谷 P2936
    AC日记——圆桌聚餐 cogs 729
    AC日记——[USACO11DEC]牧草种植Grass Planting 洛谷 P3038
    AC日记——[USACO15DEC]最大流Max Flow 洛谷 P3128
  • 原文地址:https://www.cnblogs.com/PiscesCanon/p/15202269.html
Copyright © 2020-2023  润新知