Nginx-禁用缓存资源的速率限制

Nginx-禁用缓存资源的速率限制

我有一个应用程序可以对我的产品数据库进行全文搜索。某些搜索会向用户推荐,并且比其他搜索更常见。

由于全文搜索成本高昂,我使用 Nginx 来缓存搜索结果。我希望我的用户能够随意执行建议的常见搜索,因为这些搜索大多数时候都应该被缓存。但是,我想严格限制未缓存/不常见的搜索。

是否可以根据 Nginx 是否缓存资源来应用不同的速率限制?

答案1

我设法通过创建两个单独的 nginx 实例来禁用缓存资源的速率限制。第一个实例用于缓存请求,第二个用于限制请求速率。我被迫这样做是因为最近出现了问题https://search.maven.org

缓存实例配置部分:

http {
    proxy_cache_path /data/nginx/cache keys_zone=mavencache:100m max_size=100m inactive=144h;
    server {
        proxy_cache mavencache;
        location / {
            proxy_cache_valid 200 144h;
            proxy_pass http://IP_ADDRESS_OF_THE_HOST_WITH_THE_RATE_LIMITING_INSTANCE:8080;
        }
     }
}

如果两个实例都在同一台服务器上,则 IP_ADDRESS_OF_THE_HOST_WITH_THE_RATE_LIMITING_INSTANCE 可以是 localhost。

限速实例部分配置如下:

http {
    limit_req_zone global zone=maven:100m rate=1r/s;
    server {
        location / {
            limit_req zone=maven burst=1000;
            proxy_pass https://search.maven.org:443;
        }
        listen       8080;
        listen       [::]:8080;
     }
}

现在,如果我创建一个未缓存的请求,缓存实例将调用速率限制实例,该实例将对该请求进行速率限制https://search.maven.org:443。如果我创建相同的请求,我将快速从缓存实例中获取它,而不受速率限制。

例子:

$ export MAVEN_CENTRAL_URL=http://192.168.122.176/solrsearch/select

$ time trivy i --clear-cache; time trivy i -s "MEDIUM,HIGH,CRITICAL" --debug logstash:7.0.0

real    2m5,127s
user    0m10,140s
sys     0m0,588s

$ time trivy i --clear-cache; time trivy i -s "MEDIUM,HIGH,CRITICAL" --debug logstash:7.0.0

real    0m7,938s
user    0m8,991s
sys     0m0,611s

相关内容