java nginx 502_[运维] 请求 nginx 出现 502 Bad Gateway 的解决方案!

环境:

云服务器镜像 Linux CentOS 7.6

已经安装并成功配置 SSL 的 nginx 1.16.1

成功安装并且可以正常运行的 apache-tomcat-9.0.26

遇到的问题: 在服务器没有报错的情况下, 向服务器发送 HTTPS 请求时出现 502 Bad Gateway

22bafb03af5e03973e51ad893029ef06.png

问题的前提:

(1) 在刚刚开始的时候是可以正常访问或请求, 可以接受 HTTP/HTTPS 请求

(2) 一切运行正常, 没有修改 war 包, 代码也无异常

正常情况下, 请求一个正常的接口, 是不可能出现超时现象的, 我的处理方案是

[1] 按照前人的经验, 延长 nginx 的超时时间, nginx 配置如下

http{

......

fastcgi_connect_timeout 300;

fastcgi_send_timeout300;

fastcgi_read_timeout300;

fastcgi_buffer_size 64k;

fastcgi_buffers464k;

fastcgi_busy_buffers_size 128k;

fastcgi_temp_file_write_size 128k;

......

server{

......

}

}

然后关闭 nginx , 再打开

[root@server nginx]#cd /usr/local/nginx/sbin

[root@server sbin]# ./nginx -s quit

[root@server sbin]# ./nginx

然后会发现问题并没有解决, 依然还是 502 Bad Gateway

为什么呢> 因为根本不是请求的时候时间不够用才超时的,  而是我们的服务器出了问题

然后我习惯性的去查 Tomcat 的运行情况, 为什么不查 nginx 呢? 因为它只是一个中转站, 出问题的几率不大, 输入

[root@server nginx]# ps -ef|grep tomcat

看到的结果我震惊了!!!!

root 20179 1 99 14:54 pts/0 00:00:28 /usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties

-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager

-Djdk.tls.ephemeralDHKeySize=2048

-Djava.protocol.handler.pkgs=org.apache.catalina.webresources

-Dorg.apache.catalina.security.SecurityListener.UMASK=0027

-Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

-Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat

-Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start

root 20178 1 99 14:54 pts/0 00:00:38 /usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties

-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager

-Djdk.tls.ephemeralDHKeySize=2048

-Djava.protocol.handler.pkgs=org.apache.catalina.webresources

-Dorg.apache.catalina.security.SecurityListener.UMASK=0027

-Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

-Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat

-Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start

root 20177 1 99 14:54 pts/0 00:00:48 /usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties

-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager

-Djdk.tls.ephemeralDHKeySize=2048

-Djava.protocol.handler.pkgs=org.apache.catalina.webresources

-Dorg.apache.catalina.security.SecurityListener.UMASK=0027

-Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

-Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat

-Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start

root 20215 17425 0 14:54 pts/2 00:00:00 grep --color=auto tomcat

可以看见, 居然有三个Tomcat 的进程在运行中, 我回想起来, 我当时在修改 server.xml 文件, 没有先关掉 Tomcat ,然后在没有关掉 Tomcat 的情况下又打开了一次 Tomcat, 然后发现配置没有生效, 然后关掉 Tomcat (./shutdown.sh) 又再一次打开 Tomcat (./startup.sh), 所以是服务器同时运行着多个 Java 项目, 估计 nginx 也懵逼了, 不知道该把请求给哪一个, 所以, 就超时了

所以, 当出现这种情况,

第一步

ps -ef|grep tomcat

第二步

kill -9 [pid] 也就是进程号

把多余的进程杀掉, 再重启, 当然上述问题的原理我还没弄清楚, 有空再去研究

当然还有一个可能就是, 你后台没有启动 Tomcat , 服务器上没有运行项目, 这时如果请求目标服务器的话也会出现  502 Bad Gateway

b12d3cb181b62700c972a63f87977819.png

没启动 Tomcat

1f727359cb15b7f056eabcb08a16778b.png

也是会出现这种问题的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值