用nginx反向代理 localhost:80 域名到服務(wù)器 localhost:8080 端口服務(wù)時(shí),訪問(wèn)出現(xiàn)502 bad gateway
原因分析:
1.查看8080端口服務(wù)啟動(dòng)
2.查看錯(cuò)誤日志:error.log,以centos7.x為例,更改配置路徑為:web.dev.xxx.access.ssl.log:
xxx - - [22/Oct/2019:10:24:04 +0800] "GET /test HTTP/1.1" 502 3693 "-" "curl/7.29.0" "-"
沒(méi)有相關(guān)錯(cuò)誤,說(shuō)明nginx反向代理配置沒(méi)有出錯(cuò),那就可能是tomcat服務(wù)發(fā)生異常
3.查看SELinux日志 /var/log/audit/audit.log
發(fā)現(xiàn) nginx 轉(zhuǎn)發(fā) 8080端口被拒絕建網(wǎng)站原本是網(wǎng)站策劃師、網(wǎng)絡(luò)程序員、網(wǎng)頁(yè)設(shè)計(jì)師等,應(yīng)用各種網(wǎng)絡(luò)程序開(kāi)發(fā)技術(shù)和網(wǎng)頁(yè)設(shè)計(jì)技術(shù)配合操作的協(xié)同工作。創(chuàng)新互聯(lián)公司專業(yè)提供網(wǎng)站制作、成都網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站制作(企業(yè)站、響應(yīng)式網(wǎng)站、電商門戶網(wǎng)站)等服務(wù),從網(wǎng)站深度策劃、搜索引擎友好度優(yōu)化到用戶體驗(yàn)的提升,我們力求做到極致!
SELinux缺省會(huì)通過(guò)Linux審計(jì)系統(tǒng)auditd將日志寫在/var/log/audit/audit.log內(nèi),而該服務(wù)缺省為啟用的;假若auditd長(zhǎng)駐程序并未運(yùn)行,信息將會(huì)被寫進(jìn)/var/log/messages。
type=AVC msg=audit(1571711734.564:78781): avc: denied { name_connect } for pid=22418 comm="nginx" dest=8080 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:http_cache_port_t:s0 tclass=tcp_socket
4.使用以下指令查看selinux配置:
#getsebool httpd_can_network_connect
#httpd_can_network_connect --> off
SELinux配置將httpd網(wǎng)絡(luò)連接關(guān)閉,所以很自然將其啟用即可:
setsebool -P httpd_can_network_connect 1
再次訪問(wèn),即可正常訪問(wèn),當(dāng)然,直接關(guān)閉SELinux也可以訪問(wèn),但是不建議這樣解決問(wèn)題。
nginx經(jīng)常出現(xiàn)nginx 502 bad gateway錯(cuò)誤,查看日志是最好的辦法,從源頭解決問(wèn)題,改了nginx配置或者調(diào)優(yōu)nginx,不能馬上看到效果,所以最好臨時(shí)寫個(gè)腳本,監(jiān)控網(wǎng)站的狀態(tài)碼,一旦出現(xiàn)502錯(cuò)誤,就重啟下nginx,然后一邊著手從根源上解決nginx 502 bad gateway,寫個(gè)小腳本,就當(dāng)時(shí)自動(dòng)化運(yùn)維的工具吧。腳本功能可以自己修改,日志/data/scripts/check502.log必須手動(dòng)創(chuàng)建,位置可以自己定義,腳本內(nèi)容如下:
最主要還是命令:curl --head https://blog.51cto.com/13696145 2>&1 |awk 'NR==4'| awk '{print $2}' 查看當(dāng)前的狀態(tài)碼
vim /data/scripts/check_502.sh
#!/bin/bash
#day=`date +%F_%r`
day=`date +%F_%T`
STATE=`curl --head https://blog.51cto.com/13696145 2>&1 |awk 'NR==4'| awk '{print $2}'`
if [ "$STATE" -eq "502" ]; then
pkill -9 nginx && sleep 1 && /usr/local/nginx/sbin/nginx
echo $day >>/data/scripts/check502.log
echo "nginx 已重啟" >> /data/scripts/check502.log
echo $day take a check !!! >> /data/scripts/check502.log
fi
加入定時(shí)任務(wù)crontab -e,每2分鐘執(zhí)行一次檢查;
*/2 * * * * /bin/bash -x /data/scripts/check_502.sh