Nginx报502错误,日志connect() failed (111: Connection refused) while connecting to upstream的最终完美有效解决方案

项目是采用前后端分离的模式,其中的路由关系为Nginx A为对外暴露host地址,对于App的所有请求都直接通过server走到路由挂NginxB。

路由关系为:手机App→请求(例:www.test.cn:8072/xy-app-web/index.html)→Nginx A→Nginx B

Nginx A路由到Nginx B的server配置为如下路径:

  server {
        listen       8090;
   #     listen       192.25.106.214:8090;
        server_name  192.25.106.214;
	location /xy-app-web {
            proxy_pass http://192.25.106.214:8090/xy-app-web;
            proxy_set_header Host $host:8090;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Via "nginx";
        }
        location / {
            root   html;
            index  index.html index.htm;
        }
    }

突然发现项目出现问题,访问接口报错,查看Nginx A的日志发现错误如下:

2019/01/29 16:29:48 [error] 20969#0: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 192.25.103.53, server: 192.25.106.214, request: "GET /xy-app-web/portfolio/piazza?rettype=appjson&opstation=Y_IHADPLAZA_12222222222_e9dfdb288326f0371d091ea8bd64b2f55b7906ff77b68db98ae99bafe0cf9896_07AE3442-1E72-4346-A58B-6EE511202F01_30901_3.9.0.11&logintoken=b6459d2e-1e85-489a-94e9-57d2059cba69&userId=5d395883d13573b189da524ce1401834×tamp=1548750589604&client=3&device=appweb&version=appweb&clientId=appweb&sign=8E6CFC226DBCF7DBD01A68A987363427 HTTP/1.0", upstream: "http://192.25.106.214:8090/xy-app-web/portfolio/piazza?rettype=appjson&opstation=Y_IHADPLAZA_12222222222_e9dfdb288326f0371d091ea8bd64b2f55b7906ff77b68db98ae99bafe0cf9896_07AE3442-1E72-4346-A58B-6EE511202F01_30901_3.9.0.11&logintoken=b6459d2e-1e85-489a-94e9-57d2059cba69&userId=5d395883d13573b189da524ce1401834×tamp=1548750589604&client=3&device=appweb&version=appweb&clientId=appweb&sign=8E6CFC226DBCF7DBD01A68A987363427", host: "www.xyzqts.cn:8072", referrer: "http://www.test.cn:8072/app-web/index.html"

网上搜索了半天都是什么shit一样的抄袭文章,什么PHP的问题。我们项目没有PHP,connect() failed (111:Connection refused) while connecting to upstream的原因就是网络连接建立失败了,就开始从报错的地方开始查调用链路问题,这里我们是从Nginx A服务器telent Nginx B的网络调用链路中,发现8090端口没有提供服务。方法很简单就是telent。

图片为telnet正确的情况应该是这样的:

Nginx报502错误,日志connect() failed (111: Connection refused) while connecting to upstream的最终完美有效解决方案_第1张图片

那么问题就很明显了,看一下8090端口是哪个服务提供的,说明该服务异常了,查看一下进程是否还在。

ps -ef|grep java

发现不知道什么时候,8090端口的xy-app-web没了。

我们这里是用的SpringBoot,启动它。

nohup  java -jar -Dlogging.path=./logs xy-app-web-0.0.2.jar --spring.profiles.active=test & 

再查看一下进程 : ps -ef|grep java 发现8090端口的xy-app-web已经有了。重新用手机App发起调用,发现问题解决了。

Nginx报502错误,日志connect() failed (111: Connection refused) while connecting to upstream的最终完美有效解决方案_第2张图片

 

你可能感兴趣的:(Nginx报502错误,日志connect() failed (111: Connection refused) while connecting to upstream的最终完美有效解决方案)