解決Nginx端口衝突的排查方法

問題描述

一個Spring + Angular先後端分離的項目,使用Nginx進行數據轉發。
Nginx監聽端口8100,前臺端口4200,後臺端口8080。nginx

image.png

像往常同樣,提早配置好MySQL、配置好Redis,引入項目的Nginx配置文件,而後啓動前臺、後臺,成功。git

接下來出現了問題:前臺發起的請求,只有極少數能被後臺接收到,大部分都是404,隨着在瀏覽器中的點擊,控制檯不斷的出現404。github

image.png
image.png

若是隻是404,那問題就很簡單,很大多是Nginx端口轉發設置錯了。但它的神奇之處就在於,還有那麼幾回請求,是能到達後臺的。vim

image.png
(上圖中,顯示保存成功的時候,後臺確實輸出了相關的控制檯信息)segmentfault

其餘的小夥伴都沒有出現這個問題,因而開始排查。後端

排查過程

爲了搞清楚是後端的問題仍是Nginx轉發的問題,須要先從瀏覽器的NetWork中看一下這個404是後臺返回的仍是Nginx返回的。瀏覽器

image.png
通過查看,發現是Nginx返回的。若是是後臺返回的404,會把錯誤信息寫在HTTP請求頭中。前後端分離

先查看監聽端口是否有衝突,使用nginx -T能夠查看完整的Nginx配置文件,包括引入的外部文件。學習

// 測試配置文件是否正確,並輸出完整的配置文件
nginx -T

image.png

在輸出的結果中,只看到一個8100,說明雖然引入了多個項目,但並無出現監聽端口衝突。測試

而後筆者打算從Nginx日誌中尋找一些蛛絲馬跡。

開啓Nginx的日誌模式以後,查看日誌文件,發現了上千條訪問記錄
image.png
大多數都是404,少數是200,但日誌並無提供什麼有用的信息。

最終,仍是在配置文件中發現了問題:

使用HomeBrew安裝的Nginx,它的全局配置文件中,默認的監聽端口就是8080,而項目後端佔用的端口也是8080。

image.png

雖然對於端口監聽和端口占用的原理不是很瞭解,至少能夠知道,因爲Nginx監聽了8080端口,有一部分請求被髮到了Nginx本身那裏,另外一部分纔是發送到後臺。

因此,修改全局配置文件,改掉默認端口,問題解決。
image.png

// 修改配置文件
sudo vim /usr/local/etc/nginx/nginx.conf
// 測試配置文件
nginx -t
// 重啓Nginx
nginx -s reload

終於,全部的請求都能達到後臺了。
image.png

總結

在一開始學習XAMPP的時候,就常常聽到:「若是80端口衝突,就把端口改掉,好比改爲8080」。
但是當8080成爲了咱們的習慣以後,有些項目也會使用這個端口...所以就要解決衝突問題了。

之後更改默認端口的時候,建議改爲一個不可能用到的端口,好比10000以上的端口號,避免和項目的端口產生衝突。

下週計劃

本週因爲跑環境、做息時間調整、補充遺忘的知識、從新看教程等等緣由,幾乎一行代碼也沒有敲,博客寫的也比較水,所以學習狀態有待改進。

下週計劃:

  • 用四天時間完成Alice項目全部接口的參數校驗
  • 用後兩天至少完成兩個Issue
  • 天天晚上利用空餘時間,複習教程中關於測試的內容,下週末以前看完

版權聲明

本文做者: 河北工業大學夢雲智開發團隊 - 劉宇軒
相關文章
相關標籤/搜索