Nginx 1.6.2 limit_req_zone: existe uma chave que identifica usuários únicos?

1

Atualmente, estou gerenciando um site em que os usuários estão às vezes apressados sobre novos conteúdos e atualizam a página intensamente, levando a uma alta carga de servidor e, eventualmente, a uma falha.

Eu otimizei o site tanto quanto eu razoavelmente, adicionando cache do lado do servidor, modificação do UX, aumentando a capacidade do servidor, etc ... mas ainda não é suficiente.

Eu então descobri o ngx_http_limit_req_module que está fazendo o trabalho muito bem. Há um problema: os usuários provavelmente navegam no site de um lugar específico, o que significa um mesmo endereço IP. E, nesse caso, mesmo com um comportamento de navegação civilizado, a taxa limite será acionada.

Se possível, gostaria de identificar cada usuário especificamente para que a taxa de solicitação seja acionada somente quando um único usuário atualizar a página em demasia, mas não quando muitos usuários que usam o mesmo IP navegam no site normalmente.

A sintaxe da diretiva limit_req_zone é a seguinte:

limit_req_zone key zone=name:size rate=rate;

Atualmente, estou usando algo assim:

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

A documentação do módulo também adiciona estas informações:

The key can contain text, variables, and their combination. Requests with an empty key value are not accounted.

e

Prior to version 1.7.6, a key could contain exactly one variable.

Tenho pouca ou nenhuma experiência com o Nginx, mas parece que pode haver alguma solução.

Daí minha pergunta: existe uma variável que poderia identificar usuários únicos, mesmo se eles compartilham o mesmo endereço IP?

Muito obrigado pela sua ajuda!

    
por TheTrueTDF 09.07.2015 / 12:13

1 resposta

0

Eu finalmente encontrei o ngx_http_userid_module que permite ao Nginx identificar um usuário com um cookie.

Depois de configurar este módulo, eu só precisava alterar a diretiva limit_req_zone assim:

limit_req_zone $uid_got zone=one:10m rate=1r/s;

Nota: Se este módulo ainda não estiver presente na sua instalação do Nginx, você precisará recompilá-lo com os parâmetros apropriados. Isso pode ser difícil se você não estiver familiarizado com esse processo.

    
por 13.07.2015 / 04:28

Tags