吴贺华 发表于 2017-12-23 18:30:24

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,问题果然得到解决。只是安全方面稍有欠缺,但比总是出现找不到服务器好多了。
页: [1]
查看完整版本: Nginx的 HTTP 499 状态码处理