Nginx 速率限制 GET 或 POST 请求仅在一个位置

标签 nginx nginx-location nginx-config rate-limiting

我在 nginx 中配置了一个服务器,并使用以下代码来创建我的速率限制区域:

limit_req_zone $key zone=six_zone:10m rate=60r/m;

在我所在的位置,我使用一个模块来处理请求。此位置支持 GET、POST 和 DELETE 方法。我正在尝试仅对对该位置的 GET 请求进行速率限制。这就是我认为可能有效的方法,但它没有。

location /api/ {
    if ($request_method = GET) {
        limit_req zone=six_zone;
    }
    reqfwder;
}

关于我如何处理这个问题的任何帮助或指示?谢谢。

最佳答案

希望对您有所帮助,

在您的 NGINX 配置的 http 上下文中,添加以下行:

http {
  ... # your nginx.conf here
  
  # Maps ip address to $limit variable if request is of type POST
  map $request_method $limit {
    default         "";
    POST            $binary_remote_addr;
  }
  
  # Creates 10mb zone in memory for storing binary ips
  limit_req_zone $limit zone=my_zone:10m rate=1r/s;
}

**Rate limiting for the entire NGINX process:**
http {
    ... # your nginx.conf here
    limit_req zone=global_zone;
}

REF:https://product.reverb.com/first-line-of-defense-blocking-bad-post-requests-using-nginx-rate-limiting-507f4c6eed7b

关于Nginx 速率限制 GET 或 POST 请求仅在一个位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60307759/

相关文章:

ssl - 不需要的 nginx 重定向到 https

php - Nginx。拉拉维尔。如何在子文件夹中设置多个端点

nginx - 安装 SSL 证书后所有 'Devise' 操作中出现“您想要的更改被拒绝”错误

使用查询参数值进行 NGINX 301 重定向

docker - 如何在 nginx alpine docker 镜像中启用 native 模块

browser - 如何根据客户端浏览器的语言在 nginx 中重写位置?

node.js - 使用 Socket.io 而不是普通的 ajax 调用会阻止服务器耗尽 TCP 套接字吗?

node.js - 为什么我的 NGINX 到 pm2 upstream 重启的时候很慢?

Nginx:limit_conn 与上游 max_conns(在位置上下文中)

Nginx 使用 2 个不同的 URL 服务 2 个不同的目录