为何浏览器可连接本地服务器但HAProxy无法连接?
以下是针对该问题的排查和解决步骤:
替换localhost为127.0.0.1
Mac的localhost默认同时解析IPv4和IPv6地址,如果Nginx仅绑定了IPv4的127.0.0.1,而HAProxy优先使用IPv6的::1发起连接,就会出现连接失败导致503。修改HAProxy后端配置:backend nginx mode http server nginx 127.0.0.1:8085修改后重启HAProxy生效。
检查端口连通性
在终端执行nc -zv 127.0.0.1 8085,确认HAProxy所在环境能正常连接到Nginx的8085端口。如果输出显示Connection refused,说明Nginx的监听配置存在问题,或者端口被其他进程占用。查看HAProxy日志定位错误
查看HAProxy日志文件(默认路径/var/log/haproxy.log),执行tail -f /var/log/haproxy.log后访问http://localhost:8080,日志会明确显示连接失败的原因,比如connection refused、timeout等,可根据具体错误针对性解决。配置后端健康检查
默认情况下HAProxy可能无法正确识别Nginx的健康状态,显式添加健康检查配置:backend nginx mode http server nginx 127.0.0.1:8085 check option httpchk GET / HTTP/1.1\r\nHost:localhost该配置会让HAProxy定期发送HTTP请求检查Nginx是否正常响应,避免误判后端服务不可用。
确认Nginx监听配置
检查Nginx主配置文件,确保listen指令监听的是127.0.0.1:8085或者0.0.0.0:8085,而非仅监听IPv6地址(比如listen [::]:8085)。如果是后者,需修改为同时监听IPv4和IPv6,或者单独添加IPv4的监听规则。
内容的提问来源于stack exchange,提问作者mjaggard

