Verwenden Sie einen Nginx-Proxy-Cache, um doppelte Anforderungen zu vermeiden?

Verwenden Sie einen Nginx-Proxy-Cache, um doppelte Anforderungen zu vermeiden?

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/skann optimiert werden. Wenn Sie 2r/sNGINX so einstellen, dass alle 500 Millisekunden eine Anfrage zugelassen wird ...

verwandte Informationen