環境:
雲服務器鏡像 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

也是會出現這種問題的
