Comment configurer nginx pour renvoyer le code d'état http 429 (Trop de demandes) au lieu du code 503 par défaut (Service non disponible) lors de la limitation / limitation de débit?
Pour info, j'utilise nginx comme proxy inverse avec le HttpLimitReqModule. Le projet de spécification pour le code d'état 429 est RFC6585 .
Ce (fermé) question sur les spectacles stackexchanged qu'il est possible d'utiliser la error_page directive. Cependant, je ne veux pas retourner un 429 s'il y a vraiment un problème de serveur (pas que le client nous frappe trop) et le serveur devrait retourner le service 503 non disponible.
Aucune suggestion?
nginx
http-status-code
Adambrod
la source
la source
Réponses:
Bonne nouvelle, avec la version 1.3.15 http://mailman.nginx.org/pipermail/nginx/2013-March/038306.html
nous avons les directives "limit_req_status" et "limit_conn_status". Je viens de les tester sur Gentoo Linux (notez que vous devez avoir les modules limit_req et limit_con compilés).
Avec ces paramètres, je pense que vous pouvez réaliser ce que vous avez demandé:
J'ai vérifié cela avec un rapide:
Sur lequel la plupart des demandes ont échoué après l'activation de la directive en raison du taux de demande élevé et de la limite configurée dans nginx:
la source
ab
est un outil deapache2-utils
. sur Ubuntu c'est le casab
mais sous CentOs c'est le casab2
.Sur la base de la réponse de VBart et d'autres commentaires, il est clair que la meilleure option est de mapper 503 erreurs à 429s.
Étant donné que nginx (1.3.x) n'utilise que 503 codes d'état pour limit_req et limit_conn, cela devrait être une bonne approche.
la source
Nginx lui-même ne renvoie jamais 503 dans des cas autres que limit_req et limit_conn.
la source
(proxy/factcgi/scgi/uwsgi)_intercept_errors
activé. nginx.org/r/proxy_intercept_errors