
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/s
pode ser ajustado, se você colocar 2r/s
o NGINX permitirá 1 solicitação a cada 500 milissegundos...