How do I configure nginx to return http status code 429 (Too Many Requests) instead of the default 503 (Service Unavailable) when throttling/rate limiting?
FYI, I'm using nginx as a reverse proxy with the HttpLimitReqModule. The draft spec for 429 status code is RFC6585.
This (closed) question on stackexchanged shows that it is possible to use the error_page directive. However, I don't want to return a 429 if there really is a server problem (not the customer hitting us too much) and the server should be returning 503 Service Unavailable.
Any suggestions?
Best Answer
Good news, with Version 1.3.15 http://mailman.nginx.org/pipermail/nginx/2013-March/038306.html
we have the "limit_req_status" and "limit_conn_status" directives. I just tested them on Gentoo Linux (note that you need to have the modules limit_req and limit_con compiled in).
With these settings I think you can achieve what you've asked for:
I have verified this with a quick:
On which most request failed after activating the directive due to the high request rate and the configured limit in nginx: