關於Nginx,我犯了一個傻逼的錯誤
- 2020 年 3 月 30 日
- 筆記
一開始以為後端資料庫查詢的問題,畢竟關聯了好幾張表,把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就可以了。
切記,生產中一定要搭配服務運行監控通知套件,以便第一時間發現並處理問題。

