本文主要分析解决centos下nginx配置端口转发后不生效,并出现502错误的问题
一:问题描述
通过nginx 配置 server转发后,无法达到预期的转发目的,我们假设虚拟机ip为 192.168.0.8,并且在虚拟机内通过.net core 部署一个web应用
一:问题模拟及环境搭建
1、安装nginx,详见nginx安装及基本使用
2、安装.netcore,并部署
3、检测http://192.168.0.8,与 http://192.168.0.8:5000,确保nginx默认页面及部署的.netcore 应用均能访问
4、更改nginx端口转发配置
server{ listen 80; server_name localhost; location / { proxy_pass http://localhost:5000; } }
5、结果检测,你会发现访问http://192.168.0.8时报502错误,为什么会这样呢?明明直接访问http://192.168.0.8:5000都是正常的,为什么经过nginx转发后报错了?
二、原因分析及解决方案
1、基于上面的问题,将代理连接重新改为如下代码:
server{
listen 80;
server_name localhost;
location / {
proxy_pass https://home.cnblogs.com;#修改为转发到博客园
}
}
经过修改后,再次访问http://192.168.0.8你会发现如你所料,真的转发到博客园了,那么说明了一个问题,与nginx的端口转发配置无关!!!
那么为什么能转发到外部地址,反而内部地址无法转发呢???
主要原因其实在用户权限,以及linux系统一个叫Selinux的配置
2、解决方案
修改nginx的配置文件
# vim /etc/nginx/nginx.conf
将第一行user 改为 root,默认值为nginx或nobody,根据版本不同而不同,我使用的是1.17默认值为nginx
重新加载nginx配置
# nginx -s reload
将配置文件修改后,重新访问,你会发现访问http://192.168.0.8将正确的转发到 http://192.168.0.8:5000地址
但有时候修改配置文件后依然无效,还需将Selinux禁用,具体方法为:进入selinux目录修改config文件
# cd /etc/selinux # vim config
将SELINUX设置为disabled,然后重启你的虚拟机 reboot
经过以上二步后nginx无法转发本地端口的问题将得到彻底解决