HTTP 499 狀态碼 nginx下 499錯誤
日志記錄中HTTP狀态碼出現499錯誤有多種情況,我遇到的一種情況是nginx反代到一個永遠打不開的後端,就這樣了,日志狀态記錄是499、發送位元組數是0。
老是有使用者反映網站系統時好時壞,因為線上的産品很長時間沒有修改,是以前端程式的問題基本上可以排除,于是就想着是Get方式調用的接口不穩定,問了相關人員,說沒有問題,為了拿到确切證據,于是我問相關人員要了nginx伺服器的日志檔案(awstats日志),分析後發現日志中很多錯誤碼為499的錯誤,約占整個日志檔案的1%,而它隻占全部報錯的70%左右(全部報錯見下圖),那麼所有報錯加起來就要超過1%了,這個量還是特别大的。
499錯誤是什麼?讓我們看看NGINX的源碼中的定義:
1
2
3
4
5
<code>ngx_string(ngx_http_error_495_page), /* 495, https certificate error */</code>
<code>ngx_string(ngx_http_error_496_page), /* 496, https no certificate */</code>
<code>ngx_string(ngx_http_error_497_page), /* 497, http to https */</code>
<code>ngx_string(ngx_http_error_404_page), /* 498, canceled */</code>
<code>ngx_null_string, /* 499, client has closed connection */</code>
Nginx 499錯誤的原因及解決方法
打開Nginx的access.log發現在最後一次的送出是出現了HTTP1.1 499 0 -這樣的錯誤,在百度搜尋nginx 499錯誤,結果都是說用戶端主動斷開了連接配接。
但經過我的測試這顯然不是用戶端的問題,因為使用端口+IP直接通路後端伺服器不存在此問題,後來測試nginx發現如果兩次送出post過快就會出現499的情況,看來是nginx認為是不安全的連接配接,主動拒絕了用戶端的連接配接.
解決方法:
<code>proxy_ignore_client_abort on; </code><code>#表示代理服務端不要主要主動關閉用戶端連接配接</code>
以此配置重新開機nginx,問題果然得到解決。隻是安全方面稍有欠缺,但比總是出現找不到伺服器好多了。
還有一種原因是 我後來測試發現 确實是用戶端關閉了連接配接,或者說連接配接逾時 ,無論你設定多少逾時時間多沒用 原來是php程序不夠用了 改善一下php程序數 問題解決 預設測試環境才開5個子程序。
本文轉自chengong1013 51CTO部落格,原文連結:http://blog.51cto.com/purify/1874974,如需轉載請自行聯系原作者