1. 程式人生 > >Nginx的 HTTP 499 狀態碼處理

Nginx的 HTTP 499 狀態碼處理

搜索 是什麽 src 多個 客戶端連接 alt nec logs 源碼

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

Nginx的 HTTP 499 狀態碼處理