nginx無法轉發本地端口


本文主要分析解決centos下nginx配置端口轉發后不生效,並出現502錯誤的問題

一:問題描述

通過nginx 配置 server轉發后,無法達到預期的轉發目的,我們假設虛擬機ip為 192.168.0.8,並且在虛擬機內通過.net core 部署一個web應用

一:問題模擬及環境搭建

1、安裝nginx,詳見nginx安裝及基本使用

2、安裝.netcore,並部署,詳見centos7下.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無法轉發本地端口的問題將得到徹底解決

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM