Nginx配置文件故障排查:仅连接单台后端服务器(Windows 1.26.1)
排查Nginx负载均衡仅转发到单台后端的问题
针对你Windows下Nginx 1.26.1的配置问题,按以下步骤排查:
1. 验证客户端连接复用导致的假象
默认情况下,Nginx会与后端服务器保持长连接,同时浏览器/客户端也会复用同一条连接发送多次请求,这会让你误以为所有请求都走了同一台后端。
测试方法:用curl每次强制新建连接,执行多次观察后端日志:
curl -k https://localhost:4444 -H "Connection: close"
如果这样请求能交替命中两台后端,说明是客户端长连接导致的问题,而非Nginx配置错误。
2. 确认两台后端服务器均正常运行
直接访问http://localhost:4000和http://localhost:4001,确认两者都能正常响应请求。Nginx默认会自动剔除不可用的后端,如果其中一台服务未启动或无法访问,所有请求都会被转发到正常的那台。
3. 检查Nginx配置是否生效
修改配置后,务必执行以下命令重载配置:
nginx -s reload
可以通过nginx -t命令验证配置文件语法是否正确:
nginx -t
4. 开启Nginx upstream日志追踪
修改Nginx的日志格式,添加$upstream_addr变量,直接查看每次请求转发到的后端地址:
在http块中添加或修改日志格式:
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" "$upstream_addr"';
然后在server块中指定使用该日志格式:
access_log logs/access.log main;
重启或重载Nginx后,查看logs/access.log,其中$upstream_addr字段会显示本次请求转发的后端地址,能直观确认负载均衡是否正常工作。
5. 替换localhost为127.0.0.1尝试
部分Windows环境下的localhost解析可能存在特殊情况,将upstream配置中的localhost替换为127.0.0.1:
upstream myapp { server 127.0.0.1:4000; server 127.0.0.1:4001; }
重载配置后再次测试。
6. 显式指定轮询策略(可选)
虽然Nginx默认采用轮询策略,但显式声明可以排除隐式配置问题:
upstream myapp { round_robin; server 127.0.0.1:4000; server 127.0.0.1:4001; }
内容的提问来源于stack exchange,提问作者user2666909
相关产品推荐
相关产品推荐

