
Estoy usando un proxy Nginx como interfaz para una aplicación web que tiende a recibir solicitudes duplicadas idénticas con milisegundos de diferencia, lo que genera elementos duplicados en mi base de datos.
Pensé que podría solucionar este problema permitiendo que Nginx almacene en caché el contenido durante 1 segundo, de modo que las solicitudes duplicadas no lleguen a mi aplicación en absoluto.
Lo configuré con
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=prevent_duplicates:10m max_size=1g inactive=1s use_temp_path=off;
Y luego lo agregué proxy_cache prevent_duplicates;
a mi sección de ubicación raíz, donde tengo proxy_pass
Pero mi aplicación recibe todas las solicitudes de todos modos: ¿es una cuestión de tiempo? ¿Varios hilos comienzan todos a la vez para cada solicitud y todos piensan que son los primeros?
Respuesta1
¿Quizás la limitación de velocidad pueda ser la solución?
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
server {
location /login/ {
limit_req zone=mylimit;
proxy_pass http://my_upstream;
}
}
Fuente:https://www.nginx.com/blog/rate-limiting-nginx/
Se rate=1r/s
puede modificar, si pones 2r/s
NGINX permitirá 1 solicitud cada 500 milisegundos...