Nginx故障排查思路


一 Nginx工作場景

Nginx是最受歡迎的HTTP服務器之一,在我們公司扮演着舉足輕重的作用,做為我們公司的核心組件之一,在整個訪問鏈路上是不可或缺的一環,而且, Nginx組件、模塊、版本眾多, 所以如何管理好Nginx將顯得至關重要.

Before we get started,我們先來看看Nginx的工作場景:

「1」靜態資源的web服務器

「2」http、smtp、pop3等協議的反向代理服務器

「3」緩存加速和負載均衡

我們公司主要用到了Nginx的第二個功能,即反向代理服務器,我們的服務都通過Nginx代理至Real Server,既保證Real Server的安全性,也起到了訪問流量的負載均衡.

二 Nginx問題處理流程

1 Nginx自身排查

如果出了問題,第一時間檢查是否是nginx自身因素導致的服務不可用,

「1」檢查Nginx服務是否啟動,

​ sudo lsof -P -n -i :80 -i :443 | grep LISTEN

​ ps aux | grep nginx

「2」如果服務宕掉,先試着啟動服務

​ sudo /opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf

「3」如果2成功,則訪問對應的服務,看是否正常,

如果2失敗,則需要檢查nginx的配置文件,以及各功能模塊,為了能夠更加精確的定位,我們需要開啟debug模式.然后執行:

​ nginx –t

​ tail –f /data/log/nginx/error.log

「4」可查看nginx編譯時的參數,看看是不是有些功能模塊未編譯進來.

​ nginx -V

2 外界因素排查

這里的外界干擾主要Nginx這一環以外的問題導致服務不可用,像Navigator,APIRouter等.

「1」 如果是新發的配置,確保Navigator發布的版本生效

「2」 綁定該nginx集群對應的LB的外網地址到本地hosts,觀察訪問服務是否可用

「3」 檢查DNS records

如果「2」可用,則說明是Nginx之前的環節出了問題,此時需使用dig 工具查看看解析是否正確.如果是解析錯誤,修正即可.

​ dig 域名

​ dig –t A +trace 域名

3 根具返回客戶端狀態判斷故障發生點

「1」3xx類響應碼

​ 3xx類狀態碼,通常為重定向類響應狀態碼,其中301為永久重定向,302為臨時重定向,304表示從緩存中響應,如果訪問某域名是,出現跳轉問題,那么就要檢查nginx的配置,看看rewrite規則是否合理,location是否出現優先級問題.

「2」4xx類響應碼

​ 4xx類狀態碼,通常來說表示客戶端類錯誤,

​ 如果出現400錯誤, 通常表示client發送了一個無效的請求.如果一個http1.1的請求沒有host域,那么server應該給client段發送400的狀態碼,表明這個請求server不能處理。

​ 如果出現403錯誤,會提示Forbidden,表示禁止訪問,這類原因通常來說會有2種可能,一是:客戶端請求的資源做了黑白名單,或者是一些特殊的資源(例如:status頁面);二是:

​ 如果出現404錯誤,會返回NOT Found狀態嗎,產生這種錯誤,一般是用戶發起了錯誤的請求,請求的資源不存在. Nginx需要訪問目錄,但是autoindex選項被關閉.

「3」5xx類響應碼

​ 500類響應碼通常表示服務器端出現了問題,這里可能是nginx除了問題,也又可能是后端Real Server出現了故障.

​ 502錯誤會返回Bad Gateway,及網關錯誤,這中情況,可能與cgi類型有關

​ 504 錯誤會返回Time Out,通常表示nginx作為代理時,沒有及時從上游服務器收到請求,這中情況要么是后端服務處理不了nginx轉發的請求,導致請求超時,要么就是后端服務器除了故障,比如服務意外停止…

三 常見的狀態碼

狀態碼信息查詢地址:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status

狀態碼 含義 解釋
狀態碼 含義 解釋
200 OK 請求正常處理完畢
301 Moved Permanently 永久重定向
302 Found 臨時重定向
304 Not Modified 條件式請求,資源未該被修改
400 Bad Request 請求報文語法錯誤或參數錯誤
401 Unauthorized 需要通過HTTP認證,或認證失敗
403 Forbidden 請求資源被拒絕(例如:黑名單,狀態檢測資源等)
404 Not Found 無法找到請求資源
409 Conflict 表示請求與當前服務器端的狀態相沖突;沖突最有可能發生在對 PUT 請求的響應中。例如,當上傳文件的版本比服務器上已存在的要舊,從而導致版本沖突的時候,那么就有可能收到狀態碼為 409 的響應。
500 Internal Server Error 服務器故障或Web應用故障
502 Bad Gateway 代理服務器,從上游服務器中接收到的響應是無效的
503 Service Unavailable 服務器超負載或停機維護
504 Gateway Timeout 代理服務器無法在規定的時間內獲得想要的響應
505 HTTP Version Not Supported 表示服務器不支持請求所使用的 HTTP 版本


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM