Как настроить nginx для возврата кода состояния http 429 (слишком много запросов) вместо значения по умолчанию 503 (служба недоступна) при ограничении / ограничении скорости?
К вашему сведению, я использую nginx в качестве обратного прокси-сервера с HttpLimitReqModule. Проект спецификации для кода состояния 429 - RFC6585 .
Этот (закрытый) вопрос о stackexcessed показывает, что можно использовать директиву error_page . Тем не менее, я не хочу возвращать 429, если действительно существует проблема с сервером (если клиент не слишком сильно нам мешает), и сервер должен вернуть 503 Сервис недоступен.
Какие-либо предложения?
nginx
http-status-code
adambrod
источник
источник
Ответы:
Хорошие новости, с версией 1.3.15 http://mailman.nginx.org/pipermail/nginx/2013-March/038306.html
у нас есть директивы limit_req_status и limit_conn_status. Я только что проверил их на Gentoo Linux (обратите внимание, что вам нужно иметь скомпилированные модули limit_req и limit_con).
С этими настройками я думаю, что вы можете достичь того, что вы просили:
Я быстро проверил это:
На который большинство запросов не сработало после активации директивы из-за высокой частоты запросов и настроенного лимита в nginx:
источник
ab
это инструмент отapache2-utils
. на Ubuntu это есть,ab
но под CentOs этоab2
.Исходя из ответа VBart и других комментариев, становится ясно, что наилучшим вариантом является сопоставление ошибок 503 и 429.
Так как nginx (1.3.x) использует только 503 кода состояния для limit_req и limit_conn, это должно быть хорошим подходом.
источник
Сам Nginx никогда не возвращает 503 в случаях, отличных от limit_req и limit_conn.
источник
(proxy/factcgi/scgi/uwsgi)_intercept_errors
включили. nginx.org/r/proxy_intercept_errors