問題描述
一個Spring + Angular前后端分離的項目,使用Nginx進行數據轉發(fā)。
Nginx監(jiān)聽端口8100,前臺端口4200,后臺端口8080。

像往常一樣,提前配置好MySQL、配置好Redis,引入項目的Nginx配置文件,然后啟動前臺、后臺,成功。
接下來出現了問題:前臺發(fā)起的請求,只有極少數能被后臺接收到,大部分都是404,隨著在瀏覽器中的點擊,控制臺不斷的出現404。


如果只是404,那問題就很簡單,很大可能是Nginx端口轉發(fā)設置錯了。但它的神奇之處就在于,還有那么幾次請求,是能到達后臺的。

(上圖中,顯示保存成功的時候,后臺確實輸出了相關的控制臺信息)
其他的小伙伴都沒有出現這個問題,于是開始排查。
排查過程
為了搞清楚是 后端 的問題還是 Nginx 轉發(fā)的問題,需要先從瀏覽器的NetWork中看一下這個404是后臺返回的還是Nginx返回的。

經過查看,發(fā)現是Nginx返回的。如果是后臺返回的404,會把錯誤信息寫在HTTP請求頭中。
先查看監(jiān)聽端口是否有沖突,使用nginx -T可以查看完整的Nginx配置文件,包括引入的外部文件。
// 測試配置文件是否正確,并輸出完整的配置文件
nginx -T

在輸出的結果中,只看到一個8100,說明雖然引入了多個項目,但并沒有出現監(jiān)聽端口沖突。
然后筆者打算從Nginx日志中尋找一些蛛絲馬跡。
開啟Nginx的日志模式之后,查看日志文件,發(fā)現了上千條訪問記錄

大多數都是404,少數是200,但日志并沒有提供什么有用的信息。
最終,還是在配置文件中發(fā)現了問題:
使用HomeBrew安裝的Nginx,它的全局配置文件中,默認的監(jiān)聽端口就是8080,而項目后端占用的端口也是8080。

雖然對于端口監(jiān)聽和端口占用的原理不是很了解,至少可以知道,由于Nginx監(jiān)聽了8080端口,有一部分請求被發(fā)到了Nginx自己那里,另一部分才是發(fā)送到后臺。
所以,修改全局配置文件,改掉默認端口,問題解決。

// 修改配置文件
sudo vim /usr/local/etc/nginx/nginx.conf
// 測試配置文件
nginx -t
// 重啟Nginx
nginx -s reload
終于,所有的請求都能達到后臺了。

總結
在一開始學習XAMPP的時候,就經常聽到:“如果80端口沖突,就把端口改掉,比如改成8080”。
可是當8080成為了我們的習慣之后,有些項目也會使用這個端口...因此就要解決沖突問題了。
以后更改默認端口的時候,建議改成一個不可能用到的端口,比如10000以上的端口號,避免和項目的端口產生沖突。
到此這篇關于解決Nginx端口沖突的排查方法示例的文章就介紹到這了,更多相關Nginx端口沖突的排查方法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!