¿Cómo configuro nginx para que devuelva el código de estado http 429 (Demasiadas solicitudes) en lugar del predeterminado 503 (Servicio no disponible) cuando se limita o limita la velocidad?
FYI, estoy usando nginx como proxy inverso con el HttpLimitReqModule. El borrador de la especificación para el código de estado 429 es RFC6585 .
Esta pregunta (cerrada) en stackexchanged muestra que es posible usar la directiva error_page . Sin embargo, no quiero devolver un 429 si realmente hay un problema con el servidor (no el cliente nos golpea demasiado) y el servidor debería devolver el servicio 503 no disponible.
¿Alguna sugerencia?
nginx
http-status-code
adambrod
fuente
fuente
Respuestas:
Buenas noticias, con la versión 1.3.15 http://mailman.nginx.org/pipermail/nginx/2013-March/038306.html
tenemos las directivas "limit_req_status" y "limit_conn_status". Acabo de probarlos en Gentoo Linux (tenga en cuenta que necesita tener los módulos limit_req y limit_con compilados).
Con esta configuración, creo que puedes lograr lo que has pedido:
He verificado esto con un rápido:
En el que la mayoría de las solicitudes fallaron después de activar la directiva debido a la alta tasa de solicitudes y al límite configurado en nginx:
fuente
ab
es una herramienta deapache2-utils
. en ubuntu lo es,ab
pero en CentOs lo esab2
.Según la respuesta de VBart y otros comentarios, está claro que la mejor opción es asignar los errores 503 a los 429.
Como nginx (1.3.x) solo usa códigos de estado 503 para limit_req y limit_conn, este debería ser un buen enfoque.
fuente
Nginx nunca devuelve 503 en otros casos que no sean limit_req y limit_conn.
fuente
(proxy/factcgi/scgi/uwsgi)_intercept_errors
habilitado. nginx.org/r/proxy_intercept_errors