使用 Nginx 代理快取來防止重複請求?

使用 Nginx 代理快取來防止重複請求?

我使用 Nginx 代理程式作為 Web 應用程式的前端,該應用程式往往會在幾毫秒內收到相同的重複請求,從而導致資料庫中出現重複的項目。

我想我可以透過讓 Nginx 快取內容 1 秒鐘來解決這個問題,這樣重複的請求就不會到達我的應用程式

我配置了它

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

然後添加proxy_cache prevent_duplicates;到我的根位置部分,其中我有 proxy_pass

但我的應用程式無論如何都會受到所有請求的影響 - 這是一個時間問題嗎?每個請求同時啟動多個執行緒都認為它們是第一個?

答案1

也許速率限制可以是解決方案?

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

來源:https://www.nginx.com/blog/rate-limiting-nginx/

可以rate=1r/s調整,如果你設定2r/sNGINX 將允許每 500 毫秒 1 個請求...

相關內容