用nginx反向代理 localhost:80 域名到服务器 localhost:8080 端口服务时,访问出现502 bad gateway
原因分析:
1.查看8080端口服务启动
2.查看错误日志: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" "-"
没有相关错误,说明nginx反向代理配置没有出错,那就可能是tomcat服务发生异常
3.查看SELinux日志 /var/log/audit/audit.log
发现 nginx 转发 8080端口被拒绝

SELinux缺省会通过Linux审计系统auditd将日志写在/var/log/audit/audit.log内,而该服务缺省为启用的;假若auditd长驻程序并未运行,信息将会被写进/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网络连接关闭,所以很自然将其启用即可:

setsebool -P httpd_can_network_connect 1

再次访问,即可正常访问,当然,直接关闭SELinux也可以访问,但是不建议这样解决问题。

临时处理nginx502错误方法

nginx经常出现nginx 502 bad gateway错误,查看日志是最好的办法,从源头解决问题,改了nginx配置或者调优nginx,不能马上看到效果,所以最好临时写个脚本,监控网站的状态码,一旦出现502错误,就重启下nginx,然后一边着手从根源上解决nginx 502 bad gateway,写个小脚本,就当时自动化运维的工具吧。脚本功能可以自己修改,日志/data/scripts/check502.log必须手动创建,位置可以自己定义,脚本内容如下:

最主要还是命令:curl --head https://blog.51cto.com/13696145 2>&1 |awk 'NR==4'| awk '{print $2}' 查看当前的状态码
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