Client Closed Request
Production Risk
Low — a high 499 rate is a performance signal, not a server failure.
499 Client Closed Request is an nginx-specific code logged when a client closes the connection while nginx is still processing the request. It is recorded in nginx's access log but is never sent to the client (since the connection is already gone). Also used by Esri as 'Token Required'.
- 1The user navigated away or closed the browser tab while the server was processing the request.
- 2The client application timed out and closed the connection.
- 3A network interruption severed the connection mid-request.
- 4A proxy in front of nginx closed the upstream connection due to its own timeout.
A user clicks a button that triggers a slow API call, then navigates away before the response arrives.
POST /api/slow-operation HTTP/1.1 Host: example.com # Client closes connection after 3s; server still working
expected output
nginx access log: 499 (connection closed by client)
Fix 1
Increase client-side timeout to match server processing time
WHEN Legitimate requests are being abandoned due to short client timeouts.
// Axios example axios.defaults.timeout = 30000; // 30 seconds
Why this works
Prevents the client from giving up before the server finishes processing.
Fix 2
Monitor 499 rate for performance issues
WHEN High 499 rate indicates slow responses causing client abandonment.
# In nginx log analysis: awk '$9 == 499' /var/log/nginx/access.log | wc -l
Why this works
High 499 counts are a signal that responses are too slow — optimise the backend.
✕ Do not treat 499 as a server error in alerting
499 is client-initiated; it indicates the client gave up, not that the server failed.
nginx-specific. Appears in access logs only; never sent as an HTTP response.
Esri uses 499 as 'Token Required' — distinct from the nginx meaning.
nginx log module documentation
https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#499 ↗Content generated with AI assistance and reviewed for accuracy. Found an error? hello@errcodes.dev