Como configuro o nginx para retornar o código HTTP 429 ao limitar a taxa?

10

Como eu configuro o nginx para retornar o código de status HTTP 429 (Too Many Requests) em vez do padrão 503 (Service Unavailable) quando o limite é limitado?

FYI, estou usando o nginx como um proxy reverso com o HttpLimitReqModule. A especificação de rascunho para o código de status 429 é RFC6585 .

Isso (fechado) pergunta no stackexchanged mostra que é possível usar a diretiva error_page . No entanto, eu não quero retornar um 429 se realmente houver um problema no servidor (e não o cliente nos atingir muito) e o servidor deve estar retornando o 503 Serviço Indisponível.

Alguma sugestão?

    
por adambrod 01.03.2013 / 15:40

3 respostas

18

Boas notícias, com a versão 1.3.15 link

temos as diretivas "limit_req_status" e "limit_conn_status". Eu acabei de testá-los no Gentoo Linux (note 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:

limit_req_status 429;
limit_conn_status 429;

Eu verifiquei isso rapidamente:

ab2 -n 100000 -c 55 "http://127.0.0.1/api/v1

Em que a maioria das solicitações falhou após a ativação da diretiva devido à alta taxa de solicitações e o limite configurado em nginx:

limit_req zone=api burst=15 nodelay;
    
por 18.04.2013 / 15:40
1

Com base na resposta do VBart e em outros comentários, está claro que a melhor opção é mapear erros 503 para 429s.

error_page 503 = 429 /too-many-requests.html

Como o nginx (1.3.x) usa apenas 503 códigos de status para limit_req e limit_conn, essa deve ser uma boa abordagem.

    
por 06.03.2013 / 15:58
0

O próprio Nginx nunca retorna 503 em casos diferentes de limit_req e limit_conn.

    
por 01.03.2013 / 16:01