Nginx平滑升级
Nginx/1.5.7 升级到 nginx/1.10.2
当需要将正在运行的Nginx升级、添加或删除服务模块时,可以在不中断服务的情况下,更新升级,重新编译Nginx替换旧版本。
[root@ ~]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.5.7
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)
TLS SNI support enabled
configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-file-aio --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_auth_request_module --add-module=/data/src/nginx-upstream-fair-master
编译 nginx/1.10.2,具体的编译选项根据业务需要来,这里只是做版本升级。
[root@ src]# tar xf nginx-1.10.2.tar.gz
[root@ src]# cd nginx-1.10.2
[root@ src]# ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-file-aio --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_auth_request_module --add-module=/data/src/nginx-upstream-fair-master
[root@ src]# make && make install
编译完后,旧版的二进制文件已经被替换为新版的。这时让新的进程也启动:
[root@ nginx-1.10.2]# kill -USR2 `cat /usr/local/nginx/logs/nginx.pid` && sleep 1s
此时,系统中存在新旧两类nginx进程
[root@ nginx-1.10.2]#lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 16717 root 9u IPv4 30087 0t0 TCP *:http (LISTEN)
nginx 16718 www 9u IPv4 30087 0t0 TCP *:http (LISTEN)
nginx 16719 www 9u IPv4 30087 0t0 TCP *:http (LISTEN)
nginx 16720 www 9u IPv4 30087 0t0 TCP *:http (LISTEN)
nginx 16721 www 9u IPv4 30087 0t0 TCP *:http (LISTEN)
nginx 19567 root 9u IPv4 30087 0t0 TCP *:http (LISTEN)
nginx 19568 www 9u IPv4 30087 0t0 TCP *:http (LISTEN)
nginx 19569 www 9u IPv4 30087 0t0 TCP *:http (LISTEN)
nginx 19570 www 9u IPv4 30087 0t0 TCP *:http (LISTEN)
nginx 19571 www 9u IPv4 30087 0t0 TCP *:http (LISTEN)
旧版的nginxpid文件会被命名为nginx.pid.oldbin,这时候从容关闭旧的nginx 子进程,再关闭旧ningx主进程
[root@ nginx-1.10.2]# kill -WINCH `cat /usr/local/nginx/logs/nginx.pid.oldbin` #关闭旧的子进程
[root@ nginx-1.10.2]# kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin` #关闭旧ningx主进程
[root@ nginx-1.10.2]# lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 19567 root 9u IPv4 30087 0t0 TCP *:http (LISTEN)
nginx 19568 www 9u IPv4 30087 0t0 TCP *:http (LISTEN)
nginx 19569 www 9u IPv4 30087 0t0 TCP *:http (LISTEN)
nginx 19570 www 9u IPv4 30087 0t0 TCP *:http (LISTEN)
nginx 19571 www 9u IPv4 30087 0t0 TCP *:http (LISTEN)
回滚
在执行关闭旧子进程前可以停留几分钟,或者在执行关闭旧子进程后停留几分钟,观察新进程是否正常。如果有异常可以进行回滚
[root@ nginx-1.10.2]# kill -HUP `cat /usr/local/nginx/logs/nginx.pid.oldbin` #重新启动旧子进程
[root@ nginx-1.10.2]# kill -QUIT `cat /usr/local/nginx/logs/nginx.pid` #退出新ningx主进程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能