
Ich verwende einen Nginx-Proxy als Front-End für eine Webanwendung, die dazu neigt, im Abstand von Millisekunden identische doppelte Anfragen zu erhalten, was zu doppelten Elementen in meiner Datenbank führt.
Ich dachte, ich könnte das Problem beheben, indem ich Nginx den Inhalt 1 Sekunde lang zwischenspeichern lasse, sodass doppelte Anfragen meine App überhaupt nicht treffen.
Ich habe es konfiguriert mit
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=prevent_duplicates:10m max_size=1g inactive=1s use_temp_path=off;
Und dann proxy_cache prevent_duplicates;
zu meinem Stammstandortabschnitt hinzugefügt, wo ich proxy_pass habe
Aber meine Anwendung wird trotzdem bei allen Anfragen angesprochen. Ist das eine Frage des Timings? Mehrere Threads, die alle gleichzeitig für jede Anfrage starten und denken, sie wären die Ersten?
Antwort1
Vielleicht kann eine Ratenbegrenzung die Lösung sein?
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
server {
location /login/ {
limit_req zone=mylimit;
proxy_pass http://my_upstream;
}
}
Quelle:https://www.nginx.com/blog/rate-limiting-nginx/
Dies rate=1r/s
kann optimiert werden. Wenn Sie 2r/s
NGINX so einstellen, dass alle 500 Millisekunden eine Anfrage zugelassen wird ...