注释了部分 upstream 的 server 后 Nginx 明明 reload 了但是访问依然会连接到原来的 server

2023-12-28 19:34:08 +08:00
 zanelee

有个系统后端 upstream 有 40 个节点,有些节点我们有健康检查并脚本注释并重新 reload 。但是发现 reload 后再次访问发现会出现 502 。然后我们自己手动测试发现随机注释几个节点,reload 后还会有请求到已经被注释的节点上。reload 肯定是成功的我保证。

1545 次点击
所在节点    NGINX
6 条回复
fredcc
2023-12-28 20:44:22 +08:00
nginx reload = SIGHUP signal
changing configuration, keeping up with a changed time zone (only for FreeBSD and Linux), starting new worker processes with a new configuration, graceful shutdown of old worker processes
具体看官网吧
https://nginx.org/en/docs/control.html
yinmin
2023-12-28 21:41:52 +08:00
nginx -s reload 不会重置已有的 http/https 链接。由于浏览器会重用 http/https 链接,因此你 reload 配置后刷新网站->浏览器重用老的链接->nginx 使用老配置;如果 reload 配置后重启浏览器访问就正常。

解决方法是使用 force-reload 的命令:
service nginx force-reload

force-reload 有个缺点,用户正在下载文件会被强制中断。
yinmin
2023-12-28 22:07:01 +08:00
nginx 官方解决方法是使用健康度检查命令 health_check ,是 nginx plus 的功能。也有第三方插件能实现类似功能。
yinmin
2023-12-28 22:09:55 +08:00
upstream 节点的健康度处理,不推荐改配置然后 reload 。建议用 nginx 的健康度检测功能或 nginx 第三方健康度检测插件
zanelee
2023-12-29 09:01:39 +08:00
@yinmin 浏览器重用老的 http 链接我知道,可是 reload 之后不是会等待断开老 worker 的所有连接,启动新配置的 worker 。浏览器刷新的时候不是应该会到新 worker 的新配置
salmon5
2023-12-29 11:31:55 +08:00
proxy_pass 用默认的短连接试试看,
注释掉:
#proxy_http_version 1.1;
#proxy_set_header Connection "";

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1004214

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX