一個Spring + Angular先後端分離的項目,使用Nginx進行數據轉發。
Nginx監聽端口8100,前臺端口4200,後臺端口8080。nginx
像往常同樣,提早配置好MySQL、配置好Redis,引入項目的Nginx配置文件,而後啓動前臺、後臺,成功。git
接下來出現了問題:前臺發起的請求,只有極少數能被後臺接收到,大部分都是404,隨着在瀏覽器中的點擊,控制檯不斷的出現404。github
若是隻是404,那問題就很簡單,很大多是Nginx端口轉發設置錯了。但它的神奇之處就在於,還有那麼幾回請求,是能到達後臺的。vim
(上圖中,顯示保存成功的時候,後臺確實輸出了相關的控制檯信息)segmentfault
其餘的小夥伴都沒有出現這個問題,因而開始排查。後端
爲了搞清楚是後端的問題仍是Nginx轉發的問題,須要先從瀏覽器的NetWork中看一下這個404是後臺返回的仍是Nginx返回的。瀏覽器
通過查看,發現是Nginx返回的。若是是後臺返回的404,會把錯誤信息寫在HTTP請求頭中。前後端分離
先查看監聽端口是否有衝突,使用nginx -T能夠查看完整的Nginx配置文件,包括引入的外部文件。學習
// 測試配置文件是否正確,並輸出完整的配置文件 nginx -T
在輸出的結果中,只看到一個8100,說明雖然引入了多個項目,但並無出現監聽端口衝突。測試
而後筆者打算從Nginx日誌中尋找一些蛛絲馬跡。
開啓Nginx的日誌模式以後,查看日誌文件,發現了上千條訪問記錄
大多數都是404,少數是200,但日誌並無提供什麼有用的信息。
最終,仍是在配置文件中發現了問題:
使用HomeBrew安裝的Nginx,它的全局配置文件中,默認的監聽端口就是8080,而項目後端佔用的端口也是8080。
雖然對於端口監聽和端口占用的原理不是很瞭解,至少能夠知道,因爲Nginx監聽了8080端口,有一部分請求被髮到了Nginx本身那裏,另外一部分纔是發送到後臺。
因此,修改全局配置文件,改掉默認端口,問題解決。
// 修改配置文件 sudo vim /usr/local/etc/nginx/nginx.conf // 測試配置文件 nginx -t // 重啓Nginx nginx -s reload
終於,全部的請求都能達到後臺了。
在一開始學習XAMPP的時候,就常常聽到:「若是80端口衝突,就把端口改掉,好比改爲8080」。
但是當8080成爲了咱們的習慣以後,有些項目也會使用這個端口...所以就要解決衝突問題了。
之後更改默認端口的時候,建議改爲一個不可能用到的端口,好比10000以上的端口號,避免和項目的端口產生衝突。
本週因爲跑環境、做息時間調整、補充遺忘的知識、從新看教程等等緣由,幾乎一行代碼也沒有敲,博客寫的也比較水,所以學習狀態有待改進。
下週計劃:
本文做者: 河北工業大學夢雲智開發團隊 - 劉宇軒