nginx无法转发本地端口

本文主要分析解决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无法转发本地端口的问题将得到彻底解决

猜你喜欢

转载自www.cnblogs.com/hanfeige/p/11387716.html