通过向 nginx 主进程发送 sighup 信号可以实现平滑更新响应头配置。具体做法是修改配置文件中的 add_header 指令,然后执行 nginx -s reload 或手动发送信号。nginx 主进程会重新加载配置并启动新的工作进程,旧的工作进程在处理完当前请求后优雅退出,整个过程不中断现有连接。

如何验证配置文件的语法正确性
在发送信号之前,必须使用 -t 参数检查配置文件语法。这一步能确保新配置没有格式错误,避免导致服务重启失败。如果语法检查通过,系统会提示 syntax is ok 和 test is successful,此时再执行重载操作才是安全的。

nginx -t # 输出示例: # nginx: the configuration file /etc/nginx/nginx.conf syntax is ok # nginx: configuration file /etc/nginx/nginx.conf test is successful
不同操作系统下的信号发送方式
虽然 nginx -s reload 是通用方法,但在某些自动化脚本或容器环境中,直接发送 SIGHUP 信号更为底层和可控。在 Linux 系统中,可以通过 kill 命令将信号发送给 Nginx 主进程的 PID。获取 PID 通常位于 /var/run/nginx.pid 文件中。这种方式与 reload 命令的效果一致,都是触发主进程重新读取配置。

# 假设 Nginx 主进程 PID 为 12345 kill -HUP 12345 # 或者直接使用 nginx 命令 nginx -s reload
基于 master_process on 条件下的进程行为变化
当 Nginx 配置中启用 master_process on;(默认开启)时,发送 SIGHUP 后,主进程(Master Process)负责解析新配置并生成新的工作进程(Worker Process)。旧的工作进程不会立即停止,而是继续处理已建立的连接,直到所有连接关闭或超时。新配置中的响应头(如 X-Custom-Header)仅在新启动的工作进程中生效。如果配置中删除了某个 add_header,旧工作进程仍可能返回该头部,直到其完全退出。这种机制确保了在高并发场景下,用户无感知地完成配置更新。


















