如何配置 Nginx 以仅限制 API 的速率而不限制静态文件的速率?

如何配置 Nginx 以仅限制 API 的速率而不限制静态文件的速率?

因为limit_req_zone必须在 HTTP 上下文中指定,而不能在上下文中server甚至在location上下文中,所以似乎只能为整个服务器设置速率限制。

Nginx 用于提供静态文件,用户可以根据需要随时执行此操作。但是,该/api/...路径是通过代理到达应用服务器的,因此不应受到 DoS 攻击。如何配置 Nginx 以仅限制 API 的速率?

答案1

的第一个参数limit_req_zone是要保持状态的键。文档告诉我们:

键值为空的请求不予考虑。

为了仅对网站的特定部分进行速率限制,我们需要使这些部分具有非空键。我们可以通过将/api/...URI 空间映射到远程 IP 地址并将其他所有内容映射到空键来实现这一点:

http {
    [the rest of your configuration]

    map $uri $apicall {
        default "";
        ~api $binary_remote_addr;
    }
    limit_req_zone $apicall zone=mylimit:100m rate=10r/s;
}

请注意我们$binary_remote_addr使用他们的速率限制博客文章

相关内容