Nginx动态添加模块 平滑升级

Nginx动态添加模块与平滑升级指南
本文详细介绍了如何在已安装的Nginx上动态添加新的模块,例如nginx-rtmp-module。首先,下载并解压所需模块,然后查看当前Nginx的编译参数。接下来,在原有编译参数基础上添加新模块路径,重新编译但不执行`make install`。接着,停止Nginx服务,备份旧的二进制文件,并替换为新编译的二进制文件。最后,验证新模块是否成功安装。此过程确保了服务的平滑升级,避免了系统中断。

Nginx动态添加模块 平滑升级
已经安装好的Nginx动态添加模块

说明:

已经安装好的Nginx,需要添加一个未被编译安装的模块,需要怎么弄呢? 这里已安装第三方nginx-rtmp-module模块为例

nginx的模块是需要重新编译nginx,而不是像apache一样配置文件引用.so

具体操作步骤:

(1)下载第三方扩展模块nginx-rtmp-module

# cd /home/work/software/
# wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
# unzip master.zip
# ls nginx-rtmp-module-master/

(2)查看nginx编译安装时安装了哪些模块

# /opt/nginx-1.9.5/sbin/nginx -V 
nginx version: nginx/1.9.5
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-23) (GCC) 
built with OpenSSL 1.0.1g 7 Apr 2014
TLS SNI support enabled
configure arguments: --prefix=/opt/nginx-1.9.5 --with-pcre=/home/work/software/pcre-8.38 --with-zlib=/home/work/software/zlib-1.2.8 --conf-path=/opt/nginx-1.9.5/conf/nginx.conf --pid-path=/opt/nginx-1.9.5/conf/nginx.pid --with-http_ssl_module --with-openssl=/home/work/software/openssl-1.0.1g --add-module=/home/work/software/headers-more-nginx-module-0.23 --add-module=/home/work/software/nginx-http-concat-master --with-http_gzip_static_module

可以看出编译安装使用了--prefix=/opt/nginx-1.9.5 --with-pcre=/home/work/software/pcre-8.38 --with-zlib=/home/work/software/zlib-1.2.8 --conf-path=/opt/nginx-1.9.5/conf/nginx.conf --pid-path=/opt/nginx-1.9.5/conf/nginx.pid --with-http_ssl_module --with-openssl=/home/work/software/openssl-1.0.1g --add-module=/home/work/software/headers-more-nginx-module-0.23 --add-module=/home/work/software/nginx-http-concat-master --with-http_gzip_static_module这些模块。

(3)加入需要安装的模块,重新编译,如这里添加–add-module=/home/work/software/nginx-rtmp-module-master

# cd /home/work/software/nginx-1.9.5     //进入到nginx之前安装的目录
# ./configure --prefix=/opt/nginx-1.9.5 --with-pcre=/home/work/software/pcre-8.38 --with-zlib=/home/work/software/zlib-1.2.8 --conf-path=/opt/nginx-1.9.5/conf/nginx.conf --pid-path=/opt/nginx-1.9.5/conf/nginx.pid --with-http_ssl_module --with-openssl=/home/work/software/openssl-1.0.1g --add-module=/home/work/software/headers-more-nginx-module-0.23 --add-module=/home/work/software/nginx-http-concat-master --with-http_gzip_static_module --add-module=/home/work/software/nginx-rtmp-module-master
# make    //注意:千万不要make install,不然真的就GG了

(4)替换nginx二进制文件

# /etc/init.d/nginx stop  
# cp /opt/nginx-1.9.5/sbin/nginx /opt/nginx-1.9.5/sbin/nginx.bak
# cp ./objs/nginx /opt/nginx-1.9.5/sbin/

(5)再次确认是否安装成功

# /opt/nginx-1.9.5/sbin/nginx -V 
nginx version: nginx/1.9.5
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-23) (GCC) 
built with OpenSSL 1.0.1g 7 Apr 2014
TLS SNI support enabled
configure arguments: --prefix=/opt/nginx-1.9.5 --with-pcre=/home/work/software/pcre-8.38 --with-zlib=/home/work/software/zlib-1.2.8 --conf-path=/opt/nginx-1.9.5/conf/nginx.conf --pid-path=/opt/nginx-1.9.5/conf/nginx.pid --with-http_ssl_module --with-openssl=/home/work/software/openssl-1.0.1g --add-module=/home/work/software/headers-more-nginx-module-0.23 --add-module=/home/work/software/nginx-http-concat-master --with-http_gzip_static_module --add-module=/home/work/software/nginx-rtmp-module-master
Nginx平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法。这种升级方式确保了服务的高可用性,避免了因升级导致的请求中断问题。以下是实现Nginx平滑升级的具体步骤: ### 1. 下载并编译新版本Nginx 首先,需要下载目标版本的Nginx源码包,并解压。进入解压后的目录后,使用与当前运行版本相同的配置参数进行编译,同时可以添加新的模块或修改配置参数以满足需求。 ```bash # 下载新版本Nginx wget http://nginx.org/download/nginx-1.20.0.tar.gz tar -zxvf nginx-1.20.0.tar.gz cd nginx-1.20.0 # 使用与旧版本相同的配置参数进行编译,可通过nginx -V命令查看当前运行的配置参数 ./configure --prefix=/usr/local/nginx --with-http_ssl_module --add-module=../some-module make ``` ### 2. 替换旧的Nginx二进制文件 编译完成后,`objs/nginx`即为新的Nginx可执行文件。将其替换掉旧的Nginx二进制文件,通常位于`/usr/local/nginx/sbin/`目录下。 ```bash cp /path/to/nginx-1.20.0/objs/nginx /usr/local/nginx/sbin/ ``` ### 3. 发送USR2信号给Nginx主进程 通过向Nginx主进程发送USR2信号,触发平滑升级过程。这将启动新的Nginx进程,使用新的二进制文件,同时保留旧的进程以处理尚未完成的请求。 ```bash kill -USR2 `cat /usr/local/nginx/logs/nginx.pid` ``` ### 4. 关闭旧的Nginx进程 一旦确认新版本的Nginx已经成功启动并正常工作,可以通过发送WINCH信号给旧的主进程,让其关闭所有连接并退出。这个过程可能需要一些时间,具体取决于当前正在处理的请求数量。 ```bash kill -WINCH `cat /usr/local/nginx/logs/nginx.pid.oldbin` ``` ### 5. 验证升级 最后,验证Nginx是否已成功升级到新版本,并检查是否有任何错误或异常情况。 ```bash /usr/local/nginx/sbin/nginx -v ``` ### 注意事项 - 在执行平滑升级之前,建议备份现有的Nginx配置文件和二进制文件,以便于出现问题时快速回滚。 - 确保在编译新版本时使用的配置参数与旧版本一致,否则可能导致配置不兼容的问题。 - 如果在升级过程中遇到问题,可以通过发送HUP信号给Nginx主进程来重新加载旧的配置文件,或者直接恢复备份的二进制文件[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值