Nginx:限速和缓存是按什么顺序执行的?

Ant*_*ton 12 caching nginx rate-limiting nginx-reverse-proxy

我想使用 nginx 进行速率限制和缓存。

nginx 以什么顺序应用它们?换句话说,它是仅限制对上游服务器的请求还是所有请求(包括缓存 HIT)?

这个顺序怎么改?我认为它可以通过有两个server上下文来改变。因此,例如,在一个server执行缓存。它有第二个server上下文作为上游。第二个限制对“真实”上游的请求。但这可能不是最有效的方式......

Jin*_*kur -1

如果您有网络负载均衡器,那么您必须在两台服务器上实现速率和缓存。

速率限制是这样的。

location /login/ {
    limit_req zone=mylimit burst=20;
 
    proxy_pass http://my_upstream;
}
Run Code Online (Sandbox Code Playgroud)

burst 参数定义客户端可以发出超出区域指定速率的请求数量(对于我们的示例 mylimit 区域,速率限制为每秒 10 个请求,或每 100 毫秒 1 个请求)。比上一个请求晚 100 毫秒到达的请求将被放入队列中,这里我们将队列大小设置为 20。

这意味着如果 21 个请求同时从给定的 IP 地址到达,NGINX 会立即将第一个请求转发到上游服务器组,并将剩余的 20 个放入队列中。然后,它每 100 毫秒转发一个排队请求,并且仅当传入请求使排队请求数量超过 20 时才向客户端返回 503。现在,如果您在一台服务器上限制评级,则只有两个后续请求会发送到不同的服务器会有问题。所有缓存变量也需要同步。您需要 Redis 或持久存储来进行缓存。

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