外观
reload 与 restart 的区别
结论
改 listen 一律 restart,改 server 块内容才用 reload。
为什么
nginx -s reload 的流程是:master 进程重读配置 → fork 新 worker → 旧 worker 处理完手头连接后退出。连接不断,很优雅。
但监听 socket 是 master 持有的,worker 从它那里继承。reload 不会让 master 重新 bind 端口。所以:
- 改了
listen 8443→listen 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预期什么、实际什么,改完配置对一遍,别信自己的记忆。