Skip to content

reload 与 restart 的区别

结论

listen 一律 restart,改 server 块内容才用 reload。

为什么

nginx -s reload 的流程是:master 进程重读配置 → fork 新 worker → 旧 worker 处理完手头连接后退出。连接不断,很优雅。

监听 socket 是 master 持有的,worker 从它那里继承。reload 不会让 master 重新 bind 端口。所以:

  • 改了 listen 8443listen 127.0.0.1:8443,reload 之后 ss -tlnp 看到的还是 0.0.0.0:8443
  • 加了一个新端口,reload 是能生效的(bind 新端口不影响旧的)
  • 改了已有端口的绑定地址,或者删掉一个端口,必须 restart

容器里的 OpenResty

bash
docker exec openresty nginx -t        # 先检查
docker exec openresty nginx -s reload # 改 server 块
docker restart openresty              # 改 listen

顺手:确认到底监听了什么

bash
ss -tlnp | grep -E ':80|:443|:8443'
ss -ulnp | grep 443                    # QUIC/HTTP3 是 UDP

预期什么、实际什么,改完配置对一遍,别信自己的记忆。

个人笔记,写给未来忘事的自己。