Nginx 499 问题
场景
项目发现某个接口异常,查看nginx日志是499错误,request_time大概是0.2s。谷歌后了解到nginx的499错误是用户主动断开连接导致的,哪怕接口并不是很慢。
如何模拟499
curl -m 0.01 "http://192.168.0.1/common/getDepart"
curl: (28) Operation timed out after 10 milliseconds with 0 bytes received
如何改进
nginx收到用户主动断开请求,默认是直接断开后端反向代理的。虽然用户那边已经无法改善,但是可以用nginx日志记录此次后端的真实响应过程(此次请求用户端虽然已经断开,nginx也断开了后端代理,但是后端其实仍然完整处理了任务),比如upstream_status和upstream_response_time(默认nginx都是记录的-)。如何记录呢,在nginx配置文件的server端加上:
fastcgi_ignore_client_abort on; //如果后端是fastcgi,比如php-fpm
proxy_ignore_client_abort on; //如果后端是http服务
本作品采用《CC 协议》,转载必须注明作者和本文链接