Jak skonfigurować nginx, aby zwracał kod stanu HTTP 429 (Zbyt wiele żądań) zamiast domyślnego 503 (Usługa niedostępna) podczas ograniczania / ograniczania prędkości?
Do Twojej wiadomości używam nginx jako odwrotnego proxy z HttpLimitReqModule. Wersja robocza specyfikacji dla kodu statusu 429 to RFC6585 .
To (zamknięte) pytanie dotyczące zmiany stosu pokazuje, że można użyć dyrektywy error_page . Jednak ja nie chce wrócić do 429 czy rzeczywiście istnieje problem z serwerem (nie klient trafiając nas zbyt dużo) i serwer powinien być powrót 503 Usługa niedostępna.
Jakieś sugestie?
nginx
http-status-code
adambrod
źródło
źródło
Odpowiedzi:
Dobre wieści, w wersji 1.3.15 http://mailman.nginx.org/pipermail/nginx/2013-March/038306.html
mamy dyrektywy „limit_req_status” i „limit_conn_status”. Właśnie przetestowałem je na Gentoo Linux (zauważ, że musisz mieć skompilowane moduły limit_req i limit_con).
Dzięki tym ustawieniom myślę, że możesz osiągnąć to, o co prosiłeś:
Sprawdziłem to szybko:
W przypadku których większość żądań zakończyła się niepowodzeniem po aktywowaniu dyrektywy z powodu wysokiej częstotliwości żądań i skonfigurowanego limitu w nginx:
źródło
ab
jest narzędziem odapache2-utils
. na Ubuntu jest,ab
ale pod CentOs takab2
.Na podstawie odpowiedzi VBart i innych komentarzy jasne jest, że najlepszą opcją jest zmapowanie błędów 503 na 429s.
Ponieważ nginx (1.3.x) używa tylko kodów stanu 503 dla limit_req i limit_conn, powinno to być dobre podejście.
źródło
Sam Nginx nigdy nie zwraca 503 w przypadkach innych niż limit_req i limit_conn.
źródło
(proxy/factcgi/scgi/uwsgi)_intercept_errors
włączonego. nginx.org/r/proxy_intercept_errors