[運維] 請求 nginx 出現 502 Bad Gateway 的解決方案!


環境: 

雲服務器鏡像 Linux CentOS 7.6

已經安裝並成功配置 SSL 的 nginx 1.16.1

成功安裝並且可以正常運行的 apache-tomcat-9.0.26

遇到的問題: 在服務器沒有報錯的情況下, 向服務器發送 HTTPS 請求時出現 502 Bad Gateway

問題的前提: 

(1) 在剛剛開始的時候是可以正常訪問或請求, 可以接受 HTTP/HTTPS 請求

(2) 一切運行正常, 沒有修改 war 包, 代碼也無異常

正常情況下, 請求一個正常的接口, 是不可能出現超時現象的, 我的處理方案是

[1] 按照前人的經驗, 延長 nginx 的超時時間, nginx 配置如下

http{
  ......
fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; 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

 

 沒啟動 Tomcat

 

 也是會出現這種問題的

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM