解決Nginx埠衝突的排查方法示例

2022-09-24 15:39:23 字數 1352 閱讀 8907

問題描述

乙個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的合併中產生衝...