Nginx的 HTTP 499 狀態碼處理

一、前言nginx

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

二、處理方法安全

    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,問題果真獲得解決。只是安全方面稍有欠缺,但比老是出現找不到服務器好多了。服務器

相關文章
相關標籤/搜索