近日,帮客户重新将华丹快速开发平台采用nginx+tomcat集群方式部署。访问正常,但有时有些卡顿,后查看nginx后台错误日志,发现有大量类似如下错误:

2021/01/30 17:29:00 [error] 3840#4060: *30 connect() failed (10061: No connection could be made because the target machine actively refused it) while connecting to upstream, client: 113.128.188.171, server: localhost, request: "GET /logon.jsp HTTP/1.1", upstream: "http://[::1]:8082/logon.jsp", host: "218.94.26.xxx:xxxx"

后排查原因,根据错误提示server: localhost,连接不上,尝试修改nginx.conf中upstream段,原来配置如下:

upstream webserver {

   server localhost:8081;

   server localhost:8082;

   ip_hash; #同一IP定向到后端同一台webserver,避免session共享的问题

   }

因为是访问本机Tomcat,原先用的localhost,试着修改为127.0.0.1,如下:

upstream webserver {

   server 127.0.0.1:8081;

   server 127.0.0.1:8082;

   ip_hash; #同一IP定向到后端同一台webserver,避免session共享的问题

   }

重启nginx后,问题解决,效率提升很大。

注意:这个问题并不一定是所有环境都产生,比如在阿里云Linux下,采用的nginx1.18.0,也是配置的localhost就没有问题,可能与网络设置有关。

客户的服务器环境:windows server 2003,nginx1.18.0+tomcat9.41。

如果以后遇到同样的问题,大家可如上方法解决。