Nginx可以通过向主进程发送信号实现对运行时配置的动态更新。常用信号有:
- SIGHUP:重载配置文件,实现对大部分可动态更新的配置参数修改。
- SIGUSR1:重新打开日志文件,实现错误与访问日志的轮转。
- SIGUSR2:平滑升级可执行文件,实现零宕机部署新版本Nginx。
- SIGWINCH:平滑升级配置文件,逐步应用新的配置参数,避免大范围影响。
实现配置动态更新主要通过以下步骤:
- 修改Nginx配置文件nginx.conf,例如更改worker进程数等。
- 向Nginx主进程发送SIGHUP信号,重新加载配置:
kill -HUP `cat /opt/nginx/logs/nginx.pid`
- Nginx主进程接收到SIGHUP信号后,会重读配置文件,并传播给工作进程与辅助进程,加载最新的配置参数。
- 已有客户端的请求会继续使用之前的配置处理完毕,新请求会使用更新后的配置。
- 日志文件会在之前的文件结束后重新打开,继续记录日志。
例如我们可以:
- 修改nginx.conf,将worker进程数worker_processes 4改为8。
- 发送SIGHUP信号重载配置。
- Nginx主进程会重新读取修改后的nginx.conf,并通知工作进程将worker进程数修改为8。
- 修改后新的工作进程启动,之前的4个工作进程会继续运行直到处理完成当前请求。
- 新的请求会被8个工作进程中的一个处理,实现平滑过渡到新的配置。