Como configurar o nginx para retornar o código de status http 429 (Solicitações em excesso) em vez do padrão 503 (Serviço indisponível) ao limitar / limitar a taxa?
Para sua informação, estou usando o nginx como um proxy reverso com o HttpLimitReqModule. A especificação de rascunho para o código de status 429 é RFC6585 .
Essa pergunta (fechada) no stackexchanged mostra que é possível usar a diretiva error_page . No entanto, não quero devolver um 429 se houver realmente um problema no servidor (não o cliente está nos atingindo demais) e o servidor deve retornar o Serviço 503 indisponível.
Alguma sugestão?
nginx
http-status-code
adambrod
fonte
fonte
Respostas:
Boas notícias, com a versão 1.3.15 http://mailman.nginx.org/pipermail/nginx/2013-March/038306.html
temos as diretivas "limit_req_status" e "limit_conn_status". Acabei de testá-los no Gentoo Linux (observe que você precisa ter os módulos limit_req e limit_con compilados).
Com essas configurações, acho que você pode conseguir o que pediu:
Eu verifiquei isso com uma rápida:
Na qual a maioria das solicitações falhou após a ativação da diretiva devido à alta taxa de solicitações e ao limite configurado no nginx:
fonte
ab
é uma ferramenta deapache2-utils
. no ubuntu é,ab
mas sob CentOs éab2
.Com base na resposta do VBart e em outros comentários, fica claro que a melhor opção é mapear os erros 503 para os 429s.
Como o nginx (1.3.x) usa apenas códigos de status 503 para limit_req e limit_conn, essa deve ser uma boa abordagem.
fonte
O próprio Nginx nunca retorna 503 em casos que não sejam limit_req e limit_conn.
fonte
(proxy/factcgi/scgi/uwsgi)_intercept_errors
ativou. nginx.org/r/proxy_intercept_errors