Nginx的 HTTP 499 狀態碼處理


1、前言

  今天在處理一個客戶問題,遇到Nginx access log中出現大量的499狀態碼。實際場景是:客戶的域名通過cname解析到我們的Nginx反向代理集群上來,客戶的Web服務是由一個負載均衡提供外網IP進行訪問,負載均衡后面掛了多個內網web站點業務服務器。出現的訪問日志如下所示:

2、處理方法

    499錯誤是什么?讓我們看看NGINX的源碼中的定義:
  ngx_string(ngx_http_error_495_page), /* 495, https certificate error */
  ngx_string(ngx_http_error_496_page), /* 496, https no certificate */
  ngx_string(ngx_http_error_497_page), /* 497, http to https */
  ngx_string(ngx_http_error_404_page), /* 498, canceled */
  ngx_null_string,                    /* 499, client has closed connection */

     可以看到,499對應的是 “client has closed connection”。這很有可能是因為服務器端處理的時間過長,客戶端“不耐煩”了。

       測試nginx發現如果兩次提交post過快就會出現499的情況,看來是nginx認為是不安全的連接,主動拒絕了客戶端的連接.

      在google上搜索到一英文論壇上有關於此錯誤的解決方法:
      proxy_ignore_client_abort on;
      Don’t know if this is safe.
      就是說要配置參數 proxy_ignore_client_abort on;
      表示代理服務端不要主要主動關閉客戶端連接。

      以此配置重啟nginx,問題果然得到解決。只是安全方面稍有欠缺,但比總是出現找不到服務器好多了。


免責聲明!

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



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