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

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


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

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

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

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

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

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

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

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