499 Client Closed Request
unofficial · nginx
An nginx log code: the client closed the connection before the server sent a response.
499 is an nginx-specific code that you'll find in access logs, never in a browser. It records that the client — a browser, a load balancer's health check, a mobile app — gave up while nginx was still waiting on the upstream application. Nothing was sent back, so the client never sees a 499.
| Class | Unofficial (nginx) |
|---|---|
| Retry? | Not applicable |
| Cacheable by default | No — only with explicit Cache-Control |
| Response body | Allowed |
| Defined in | nginx — proxy_ignore_client_abort |
Example response
HTTP/1.1 499 Client Closed Request
Content-Type: application/json
Content-Length: 33
{"error":"Client Closed Request"}Common causes
- Users navigating away from, or cancelling, a slow request.
- Client timeouts shorter than the backend's response time — an app or load balancer giving up after 30 s while the backend takes 40 s.
- Health checks with aggressive timeouts.
How to fix it
- Find out why the upstream is slow — 499s cluster on the slowest endpoints.
- Align timeouts so clients wait longer than the backend's expected response time, or make the backend faster.
- To keep processing even after the client leaves, set
proxy_ignore_client_abort on;.
Check what a URL returns
Print just the status line from the command line, or check a whole list of URLs at once, with their response headers, in the HTTP Status Checker.
curl -sI https://example.com/your-path | head -n 1
Frequently asked questions
Is 499 a client error or a server error?
It's logged as client-side because the client disconnected, but the root cause is often a slow backend. Treat a spike in 499s like a spike in latency.
Related status codes