Nginx如何实现动态更新配置?

Nginx可以通过向主进程发送信号实现对运行时配置的动态更新。常用信号有:

  • SIGHUP:重载配置文件,实现对大部分可动态更新的配置参数修改。
  • SIGUSR1:重新打开日志文件,实现错误与访问日志的轮转。
  • SIGUSR2:平滑升级可执行文件,实现零宕机部署新版本Nginx。
  • SIGWINCH:平滑升级配置文件,逐步应用新的配置参数,避免大范围影响。

实现配置动态更新主要通过以下步骤:

  1. 修改Nginx配置文件nginx.conf,例如更改worker进程数等。
  2. 向Nginx主进程发送SIGHUP信号,重新加载配置:
kill -HUP `cat /opt/nginx/logs/nginx.pid`
  1. Nginx主进程接收到SIGHUP信号后,会重读配置文件,并传播给工作进程与辅助进程,加载最新的配置参数。
  2. 已有客户端的请求会继续使用之前的配置处理完毕,新请求会使用更新后的配置。
  3. 日志文件会在之前的文件结束后重新打开,继续记录日志。

例如我们可以:

  1. 修改nginx.conf,将worker进程数worker_processes 4改为8。
  2. 发送SIGHUP信号重载配置。
  3. Nginx主进程会重新读取修改后的nginx.conf,并通知工作进程将worker进程数修改为8。
  4. 修改后新的工作进程启动,之前的4个工作进程会继续运行直到处理完成当前请求。
  5. 新的请求会被8个工作进程中的一个处理,实现平滑过渡到新的配置。