本文主要分析解決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無法轉發本地端口的問題將得到徹底解決