Usando um cache proxy Nginx para evitar solicitações duplicadas?

Usando um cache proxy Nginx para evitar solicitações duplicadas?

Estou usando um proxy Nginx como front-end para um aplicativo da web que tende a obter solicitações duplicadas idênticas com intervalos de milissegundos, causando itens duplicados em meu banco de dados.

Achei que poderia consertar isso permitindo que o Nginx armazenasse o conteúdo em cache por 1s, para que solicitações duplicadas não atingissem meu aplicativo.

Eu configurei com

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=prevent_duplicates:10m max_size=1g inactive=1s use_temp_path=off;

E então adicionado proxy_cache prevent_duplicates;à minha seção de localização raiz, onde tenho proxy_pass

Mas meu aplicativo é atingido em todas as solicitações de qualquer maneira - é uma questão de tempo? Vários threads, todos começando ao mesmo tempo para cada solicitação, todos pensando que são os primeiros?

Responder1

Talvez a limitação de taxa possa ser a solução?

limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
 
server {
    location /login/ {
        limit_req zone=mylimit;
        
        proxy_pass http://my_upstream;
    }
}

Fonte:https://www.nginx.com/blog/rate-limiting-nginx/

O rate=1r/spode ser ajustado, se você colocar 2r/so NGINX permitirá 1 solicitação a cada 500 milissegundos...

informação relacionada