nginx-499
Nginx 499 客户端断开连接的定位
现象
访问日志出现 499,含义是客户端在服务端返回响应前关闭了连接。它不一定是 Nginx 故障,更多是后端太慢或客户端超时。
快速定位
tail -f /var/log/nginx/access.log
grep ' 499 ' /var/log/nginx/access.log | tail -20
tail -f /var/log/nginx/error.log
在日志格式中记录耗时:
log_format timing '$remote_addr $request $status '
'rt=$request_time urt=$upstream_response_time';
常见根因
- 后端处理慢,客户端等不及主动断开。
- 客户端/浏览器/移动网络超时或重试。
- 网关、负载均衡或 CDN 的超时时间短于后端处理时间。
- 长轮询、流式响应或大文件下载被中间层切断。
proxy_read_timeout 等参数与业务不匹配。
修复
- 先看
$request_time 和 $upstream_response_time,区分 Nginx 自身和后端耗时。
- 优化慢接口、加缓存、异步化或拆分长任务。
- 按业务调整客户端、网关、Nginx 和后端的超时,保持层级一致。
- 长连接场景确认 keepalive 和中间设备的空闲超时。
- 流式/下载场景检查缓冲和分块配置。
- 499 很多但业务无感时,先确认是否是客户端主动取消。
相关命令
nginx — 日志与超时配置
curl — 复现耗时
journalctl — 后端日志