使用 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 个请求...

相关内容