信号发送

发送信号

nginx -s signal

发送信号说明

  • 使用 nginx -s 命令发送信号
  • 信号用于控制 Nginx 的行为

发送信号原理nginx -s 命令会向 Master 进程发送信号,Master 进程收到信号后,会根据信号执行相应的操作。

可用信号

信号说明对应系统信号
stop快速关闭SIGTERM
quit优雅关闭SIGQUIT
reopen重新打开日志文件SIGUSR1
reload重新加载配置SIGHUP

信号说明

  • stop:快速关闭 Nginx,立即终止所有进程
  • quit:优雅关闭 Nginx,等待当前请求完成
  • reopen:重新打开日志文件,用于日志轮转
  • reload:重新加载配置,不中断服务

示例

# 重新加载配置
nginx -s reload

# 重新打开日志
nginx -s reopen

# 优雅关闭
nginx -s quit

# 快速关闭
nginx -s stop

示例说明

  • nginx -s reload:重新加载配置,不中断服务
  • nginx -s reopen:重新打开日志文件,用于日志轮转
  • nginx -s quit:优雅关闭 Nginx,等待当前请求完成
  • nginx -s stop:快速关闭 Nginx,立即终止所有进程

信号详解

stop

快速关闭 Nginx,立即终止所有进程。

工作原理

  1. Master 进程收到 SIGTERM 信号
  2. Master 进程立即终止所有 Worker 进程
  3. Master 进程退出

适用场景

  • 紧急情况需要立即停止 Nginx
  • Nginx 出现严重错误无法正常关闭

quit

优雅关闭 Nginx,等待当前请求完成。

工作原理

  1. Master 进程收到 SIGQUIT 信号
  2. Master 进程停止接受新连接
  3. Master 进程通知 Worker 进程开始优雅关闭
  4. Worker 进程停止接受新请求
  5. Worker 进程等待当前请求完成
  6. Worker 进程处理完所有请求后退出
  7. Master 进程等待所有 Worker 进程退出
  8. Master 进程退出

适用场景

  • 正常关闭 Nginx
  • 更新 Nginx 可执行文件
  • 系统维护

reopen

重新打开日志文件,用于日志轮转。

工作原理

  1. Master 进程收到 SIGUSR1 信号
  2. Master 进程通知所有 Worker 进程重新打开日志文件
  3. Worker 进程关闭当前的日志文件
  4. Worker 进程打开新的日志文件
  5. Worker 进程继续处理请求

适用场景

  • 日志轮转后重新打开日志文件
  • 不需要重启 Nginx

reload

重新加载配置文件,不中断服务。

工作原理

  1. Master 进程收到 SIGHUP 信号
  2. Master 进程读取新的配置文件
  3. Master 进程验证新配置文件的语法
  4. Master 进程启动新的 Worker 进程
  5. Master 进程向旧的 Worker 进程发送优雅退出信号
  6. 旧的 Worker 进程停止接受新请求
  7. 旧的 Worker 进程等待当前请求完成
  8. 旧的 Worker 进程处理完所有请求后退出
  9. 新的 Worker 进程处理新请求

适用场景

  • 修改了虚拟主机配置
  • 修改了 location 配置
  • 修改了代理配置
  • 修改了缓存配置

最佳实践

  1. 使用优雅关闭:避免中断正在处理的请求
  2. 重新加载配置:不中断服务的情况下更新配置
  3. 使用信号控制:使用信号控制 Nginx 行为
  4. 监控进程:定期检查进程状态