nginx 报错 connect() failed (111: Connection refused)

网站部署后客户端访问正常,access log中显示请求为200,但error log中报错connect() failed (111: Connection refused)

问题分析

nginx_error.log

2020/*/* *:*:* [error] 13860#0: *778 connect() failed (111: Connection refused) while connecting to upstream, 
client: 139.199.82.203, server: xxxx.com, request: "GET / HTTP/1.1", 
upstream: "http://[::1]:8080/", host: "www.xxxx.com"

Connection refused报错很大概率是CGI出错,首先检查上游server,发现服务正常可访问,原因应该出在nginx上,经过搜索找到问题在ipv6上,报错信息中 upstream: http://[::1]: 是一个IPv6地址
通过命令ip addr可以检查服务器是否有IPv6地址字段inet6,如果有那么问题定位成功

解决办法

解决思路有几个,第一:禁用服务器ipv6,但这种方式对机器修改较大,云服务器中ipv6可能被管控服务使用,修改风险较大,第二个是修改上游server支持IPv6,但前端已有nginx做反向代理,没必要做此项修改,最后更恰当的方法是修改nginx中配置

nginx.conf配置中网站对应server模块中的location,修改proxy_pass中的host,出错时的配置是:

proxy_pass http://localhost:8080;

但为了强制指定IPv4的地址,需要变成:

proxy_pass http://127.0.0.1:8080;

修改后重启nginx再次观察nginx_error.log, 发现已经不再报错,问题解决

你可能感兴趣的:(nginx 报错 connect() failed (111: Connection refused))