因为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
使用他们的速率限制博客文章。