limitação de taxa nginx com cabeçalho X-Forwarded-For

21

Estou analisando a limitação de taxa usando o HttpLimitReqModule do nginx. No entanto, todas as solicitações são provenientes do mesmo IP (um balanceador de carga), com o endereço IP real nos cabeçalhos.

Existe uma maneira de ter um limite de taxa nginx baseado no ip no cabeçalho X-Forwarded-For em vez do ip da fonte?

    
por John Brodie 13.03.2013 / 15:38

2 respostas

24

Sim, a string típica de definição de configuração com limitação de taxa é semelhante a:

 limit_req_zone  $binary_remote_addr zone=zone:16m rate=1r/s;

em que $ binary_remote_addr é a chave exclusiva para o limitador. Você deve tentar alterá-lo para $ http_x_forwarded_for variable, que recebe o valor do cabeçalho X-Forwarded-For. Embora isso aumente o consumo de memória, porque $ binary_remote_addr está usando o formato binário compactado para armazenar endereços IP e $ http_x_forwarded_for não é.

 limit_req_zone  $http_x_forwarded_for zone=zone:16m rate=1r/s;
    
por 13.03.2013 / 15:57
4

A diretiva limit_req_zone define a variável a ser usada como chave para o agrupamento de solicitações.
Geralmente, o $binary_remote_addr é usado em vez de $remote_addr porque é menor e economiza espaço.

Talvez você queira usar o RealipModule .
Isso irá reescrever as variáveis de endereços remotos para o endereço fornecido em um cabeçalho personalizado e também facilitará o registro e o uso de outras variáveis.

    
por 13.03.2013 / 15:59