共计 1942 个字符,预计需要花费 5 分钟才能阅读完成。
日志记录中 HTTP 状态码出现 499 错误有多种情况,我遇到的一种情况是 nginx 反代到一个永远打不开的后端,就这样了,日志状态记录是 499、发送字节数是 0。
给业务部门做一个代理使用 google docs。总是莫名奇妙的反馈打不开,发现 nginx 日志下报了很多 499。
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 499 错误的原因及解决方法
打开 Nginx 的 access.log 发现在最后一次的提交是出现了 HTTP1.1 499 0 - 这样的错误,在百度搜索 nginx 499 错误,结果都是说客户端主动断开了连接。
但经过我的测试这显然不是客户端的问题,因为使用端口 +IP 直接访问后端服务器不存在此问题,后来测试 nginx 发现如果两次提交 post 过快就会出现 499 的情况,看来是 nginx 认为是不安全的连接,主动拒绝了客户端的连接.
但搜索相关问题一直找不到解决方法,最后终于在 google 上搜索到一英文论坛上有关于此错误的解决方法:
proxy_ignore_client_abort on;
Don’t know if this is safe.
就是说要配置参数 proxy_ignore_client_abort on;
表示代理服务端不要主要主动关闭客户端连接。
以此配置重启 nginx, 问题果然得到解决。只是安全方面稍有欠缺,但比总是出现找不到服务器好多了。
还有一种原因是 我后来测试发现 确实是客户端关闭了连接, 或者说连接超时 , 无论你设置多少超时时间多没用 原来是 php 进程不够用了 改善一下 php 进程数 问题解决 默认测试环境才开 5 个子进程。
————————————– 分割线 ————————————–
Nginx 负载均衡配置实战 http://www.linuxidc.com/Linux/2014-12/110036.htm
CentOS 6.2 实战部署 Nginx+MySQL+PHP http://www.linuxidc.com/Linux/2013-09/90020.htm
使用 Nginx 搭建 WEB 服务器 http://www.linuxidc.com/Linux/2013-09/89768.htm
搭建基于 Linux6.3+Nginx1.2+PHP5+MySQL5.5 的 Web 服务器全过程 http://www.linuxidc.com/Linux/2013-09/89692.htm
CentOS 6.3 下 Nginx 性能调优 http://www.linuxidc.com/Linux/2013-09/89656.htm
CentOS 6.3 下配置 Nginx 加载 ngx_pagespeed 模块 http://www.linuxidc.com/Linux/2013-09/89657.htm
CentOS 6.4 安装配置 Nginx+Pcre+php-fpm http://www.linuxidc.com/Linux/2013-08/88984.htm
Nginx 安装配置使用详细笔记 http://www.linuxidc.com/Linux/2014-07/104499.htm
Nginx 日志过滤 使用 ngx_log_if 不记录特定日志 http://www.linuxidc.com/Linux/2014-07/104686.htm
————————————– 分割线 ————————————–
Nginx 的详细介绍 :请点这里
Nginx 的下载地址 :请点这里
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-08/134707.htm