nginx 301 'limit_req taxa de solicitações limitadas em vez de página de erro

4

Eu tenho um formulário de pesquisa em massa em servidores apache por trás do nginx. Gostaria de proteger esse local para que a segunda solicitação em um período de 10 minutos seja enviada para a página "Deseja usar nossa API" com algo como:

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    server {
       location = /search/bulk {
                limit_req zone=one burst=2;
                 ...  SOME CONFIG HERE...
       }
    }
}

Como eu iria 301 o cliente final quando eles atingiram meu limit_req em vez de mostrar uma página de erro ngnix? Além disso, secundariamente, não quero limitar o tráfego a toda a cláusula http. Posso configurar um limit_req_zone sem uma taxa, mas tê-los nas minhas estrofes de localidade?

Obrigado,

M.

    
por mogmismo 19.02.2014 / 16:11

1 resposta

5

Por padrão, nginx retornará um código de erro 503 service temporarily unavailable .

A diretiva limit_req_status existe para alterar o código de erro, caso eles atinjam o limit_req :

location = /search/bulk {
          limit_req zone=one burst=2;
          limit_req_status 404;
}

O problema é que essa diretiva permite apenas um intervalo de 400 a 599, portanto, você não pode especificar um 301 :

[emerg] 3130#0: value must be between 400 and 599 in /etc/nginx/nginx.conf:72

Portanto, se o seu problema principal é exibir uma mensagem de erro personalizada em vez do padrão 503 , você pode proceder assim:

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    server {
       location = /search/bulk {
                limit_req zone=one burst=2;
                error_page  503  /503.html;
       }
       location  /503.html {
            internal;
       }
    }
}

Em seguida, seu arquivo 503.html personalizado:

<html><body>Would you like to use our API ?</body></html>

O argumento rate é obrigatório. Você precisa especificar uma taxa para limit_req_zone

    
por 19.02.2014 / 19:27