【问题标题】:can you set an exception for nginx's requests per second limit?你可以为 nginx 的每秒请求数限制设置一个例外吗?
【发布时间】:2013-10-17 16:22:16
【问题描述】:

我们尝试通过限制每秒请求数来节省 nginx 资源:

http {
    limit_req_zone  $binary_remote_addr  zone=gulag:10m  rate=2r/s;

    server
    {
        location / {
         proxy_pass http://0.0.0.0:8181;
         limit_req   zone=gulag  burst=40;
        }
    }
}

但是,我们公司的大多数员工也是我们自己网站的重度用户。由于公司中的每个人似乎都来自同一个 IP 地址,因此出现 503 错误,因为 nginx 认为所有流量都来自一个用户。我们可以将我们的 ip 添加为每秒请求数限制的例外吗?

【问题讨论】:

  • 为什么不将 ip 结合到 cookie 跟踪系统而不是使用异常? (请通知我@我不检查答案)
  • @user2284570 你能解释一下它是如何工作的吗?
  • 这意味着您将通过直接识别客户端程序而不是它的 ip 来工作。
  • @user2284570 那么我会在应用程序级别而不是 nginx 上进行限制吗?你有什么有用的链接吗?
  • 不,你会在网络服务器上做这件事。 Cookie 只是一个示例:您会看到“此页面正在使用 Cookie。 Read more' 在许多这样的网站上one. 它允许广告商直接识别网络浏览器。如果网络浏览器删除了它的 cookie,那么它与它相关联的 IP 将被比较。
    因此广告商可以跟踪使用相同 ip 的多个用户的浏览习惯。
    当然他们不只使用 cookie/相关 IP ,但这就是我目前所知道的。在您的情况下,它还允许您的网站使用大型代理。

标签: nginx request limit


【解决方案1】:

是的,你可以。引用the documentation:

键是指定变量的任何非空值(空值不计)。

因此,您可以像这样使用geomap 模块来实现您的目标:

geo $limited_net {
    default      1;
    10.1.0.0/16  0;
}

map $limited_net $addr_to_limit {
    0  "";
    1  $binary_remote_addr;
}

limit_req_zone  $addr_to_limit  zone=gulag:10m  rate=2r/s;

【讨论】:

  • 太棒了,谢谢!我执行了 nginx -V 并且默认情况下似乎没有安装这些模块。我明天重新编译并验证你的答案。
  • 我推荐你使用官方包。他们肯定有这些模块:nginx.org/en/linux_packages.html
  • 顺便说一句,构建这些模块你不需要任何特殊的配置参数
  • 你是说这些模块是默认安装的?我可以在我的 nginx 配置中使用它们吗?
  • 是的,除非您的 nginx 已使用 --without-http_map_module--without-http_geo_module 选项进行编译。
猜你喜欢
  • 2012-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-20
  • 2016-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多