問題描述
乙個spring + angular前後端分離的專案,使用nginx進行資料**。
nginx監rgkdlob聽埠8100,前台埠4200,後台埠8080。
像往常一樣,提前配置好mysql、配置好redis,引入專案的nginx配置檔案,然後啟動前台、後台,成功。
接下來出現了問題:前台發起的請求,只有極少數能被後台接收到,大部分都是404,隨著在瀏覽器中的點選,控制台不斷的出現404。
如果只是404,那問題就很簡單,很大可能是nginx埠**設定錯了。但它的神奇之處就在於,還有那麼幾次請求,是能到達後台的。
(上圖中,顯示儲存成功的時候,後台確實輸出了相關的控制台資訊)
其他的小夥伴都沒有出現這個問題,於是開始排查。
排查過程
為了搞清楚是後端的問題還是nginx**的問題,需要先從瀏覽器的network中看一下這個404是後台返回的還是nginx返回的。
經過檢視,發現是ngiwww.cppcns.comnx返回的。如果是後台返回的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以上的埠號,避免和專案的埠產生衝突。
windows下解決埠衝突
apache雖然能執行,但是看見error.log中有httpd.exe could not reliably determine the server s fully qualified domain name,using 192.168.x.x for servername這個錯誤,想看看是否有...
nginx解決埠問題
網域名稱問題解決了,但是現在要訪問後台頁面,還得自己加上埠 這就不夠優雅了。我們希望的是直接網域名稱訪問 這種情況下埠預設是80,如何才能把請求轉移到9001埠呢?這裡就要用到反向 工具 nginx 3.4.1.什麼是nginx 反向 負載均衡 動態路由 請求過濾 3.4.2.nginx作為web伺...
git解決衝突 刪除本地 Git衝突與解決方法
1 git衝突的場景 情景一 多個分支 合併到乙個分支時 情景二 多個分支向同乙個遠端分支推送 時 實際上,push操作即是將本地 merge到遠端庫分支上。關於push和pull其實就分別是用本地分支合併到遠端分支 和 將遠端分支合併到本地分支 所以這兩個過程中也可能存在衝突。git的合併中產生衝...