在保证Nginx正常处理请求的情况下升级Nginx
前言
Nginx是一个功能强大的Web服务器,用于服务于世界上许多最受欢迎的站点。 在本博客中,我将演示如何在不丢失客户端连接的情况下升级Nginx可执行文件。
升级方法
Nginx通过在服务启动时生成主进程来工作。同时,主服务会启动一个或多个处理实际客户端连接的工作进程。 Nginx旨在在收到管理员发出的特定信号时执行某些操作。 使用这些信号,您可以轻松地就地升级Nginx或其配置,而不会丢失客户端连接。以下是Nginx master进程与work进程之间常用的信号:
USR2:这会产生一组新的master/worker进程,而不会影响旧的master/worker进程。
WINCH:这告诉Nginx master 进程正常停止其关联的worker 进程。
HUP:这告诉Nginx主进程重新读取其配置文件,同时该master进程下的生成新worker进程,这些worker也使用新的配置文件。 如果新旧master进程正在运行,如果这个信号发送给旧master进程,该进程使用旧的配置文件,该master生成的worker进程也使用旧的配置文件。
QUIT:这样可以优雅地关闭master进程及其worker进程。
TERM:这会使master进程及其worker进程的快速关闭。
KILL:这会立即杀死一个master进程及其worker进程而不进行任何清理。
平稳升级步骤
1)备份Nginx old 可执行文件及配置文件到指定的目录
2)拷贝新的Nginx 可执行文件到Nginx可执行目录
3)kill -s "USR2" nginx old process ID
4) kill -s "WINCH" nginx old process ID
如果新的Nginx 可执行文件能正常处理新功能,这是我们就可以执行5)步骤。否则,我们就需要执行kill -s "HUP" nginx old process ID
5) kill -s "QUIT" nginx old process ID
平稳升级举例
1) 获取Nginx PID。使用ps 命令。从下图可以看出来Nginx PID为12223 。如下所示:
2)新的Nginx bin文件新加了Nginx test模块。在没升级之前是不能访问的。如下所示:
3)在更新Nginx 配置文件及可执行文件后。运行nginx -s "USR2" 12223 。如下图所示:
4)测试新的Nginx 模块OK。
5)退出Nginx old
运行kill -s "USR2" 12223 及 kill -s “QUIT” 12223。如下图所示:
这样不中断连接就升级成功了。