一、【问题描述】
今天巡检Web服务器时,发现Nginx的error日志里,有许多报错信息,其中有一条如下显示:
[error] 2334#2334: *253268 connect() failed (111: Connection refused)
while connecting to upstream, client: 172.12.23.44, server: 212.65.12.29,
request: "OPTIONS /yun//sys/menu/nav?t=1583288052697 HTTP/1.1",
upstream: "http://127.0.0.1:8060/yun/sys/menu/nav?t=1583288052697",
host: "212.65.12.29:8002", referrer: "http://39.107.238.105/yun-web/"
二、 【日志分析】
上述报错信息,表明172.12.23.44该地址请求平台资源时,转到后台127.0.0.1:8060上去了,请求客户端外网地址212.65.12.29:8002,即请求8002端口转发到后端的8060端口上去了,资源路径为/yun-web/,而日志中报请求资源时,无法连接;
问题可能有以下原因:
1)服务端口8060不通,前端web服务器到后台业务应用服务之间信息不通;可telnet ip 端口,来验证;确认网络通信正常,ip端口监听正常。
2)nginx配置文件中proxy_pass 地址配置有误,无法找到后端服务器;
3)查看web服务器socket是否正常启动:netstat -lnp|grep 8002
(对外web服务端口);是否存在端口冲突;
4)如果日志中upstream后有fastcgi://或uwsgi://这样的信息,请检查php-fpm和uwsgi服务是否正常启动,检查php-fpm.conf配置文件pm.max_children最大线程数/队列数是否配置过小,适当调大后重试;另外检查fastcgi_pass的配置是否正确,/usr/local/php/sbin/php-fpm start;(一般常用nginx的话不会用php,该步骤可忽略),当然如果你的nginx里配置了php,可检查php的location配置,注意fastcgi_pass 是否配置正确,
5)检查location中的allow选项配置,排除权限问题;(一般如果之前正常,该问题几乎可忽略);如果nginx配置文件中有ALLOWED_HOSTS配置,可按如下:ALLOWED_HOSTS = ['服务器外网ip', '域名', '127.0.0.1']
进行配置;
三、【问题处理】
我的现场实际是,nginx配置文件中的后台服务配置为了127.0.0.1,原先是单机部署,后已业务扩展改造为前后端分离,而该地址未改变,故本地无法请求到后端服务,将该地址修改为后端转发upstream的名称后,重启nginx正常。