一 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 版本 |