關於Nginx,我犯了一個傻逼的錯誤

  • 2020 年 3 月 30 日
  • 筆記

測試環境上線新功能,在測試的時候有規律的發現頁面載入數據巨慢,查看網路請求,發現後端請求時間超長,吃精的達到了5秒+++以上。這種問題還頻繁出現,遙想開發的時候並沒有出現過這種問題。

一開始以為後端資料庫查詢的問題,畢竟關聯了好幾張表,把SQL拷貝出來執行了一下,然而也就幾十毫秒而已,不死心又在後台列印了一下執行時間,一切正常。

又一想是不是攔截器中相關校驗的問題,再一次證明我的想法是錯誤的。

既然後端沒問題,那麼問題可能會出現在代理伺服器上,測試環境架設了Nginx代理服務。檢查了一下配置文件,卧槽!!!果然是自己給自己挖下的坑,之前測試負載均衡的時候啟動了兩個服務,如下:

upstream backserver {      server 192.168.1.180:8091;      server 192.168.1.190:8091;  }

然鵝,測試完之後把其中一個服務給掐斷了。

那麼為什麼是偶爾出現呢?步調還這麼一致。這就要撩一下Nginx負載均衡檢查模組中的max_fails和fail_timeout這兩個參數了,默認情況下:

max_fails=1 fail_timeout=10s

翻譯過來就是:在單位周期為fail_timeout設置的時間中達到max_fails次數,在這個周期次數內,如果後端同一個節點不可用,那麼接將把節點標記為不可用,並等待下一個周期再一次去請求,判斷是否連接是否成功。如果成功,將恢復之前的輪詢方式,如果不可用將在下一個周期再試一次。

把掐斷的服務地址注釋掉,重啟下Nginx就可以了。

切記,生產中一定要搭配服務運行監控通知套件,以便第一時間發現並處理問題。

Tags: