重複したリクエストを防ぐために Nginx プロキシ キャッシュを使用していますか?

重複したリクエストを防ぐために Nginx プロキシ キャッシュを使用していますか?

私は、数ミリ秒間隔で同一の重複リクエストを受信する傾向がある Web アプリケーションのフロントエンドとして Nginx プロキシを使用しています。その結果、データベースに重複アイテムが発生します。

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調整可能で、NGINX を設定すると、5002r/sミリ秒ごとに 1 つのリクエストが許可されます...

関連情報