【问题标题】:Rate limit in nginx based on http header基于http头的nginx中的速率限制
【发布时间】:2015-06-21 03:04:57
【问题描述】:

也许我问的是一个糟糕的问题,但我想基于自定义 http 标头而不是基于 IP 在 nginx 中应用速率限制。我的基于 IP 的配置正在运行,但我无法使用自定义 http 标头。我想要的是,如果 http 请求中存在特定的标头,则应应用速率限制,否则不应用。

配置文件

       http {
            limit_req_zone $http_userAndroidId zone=one:10m rate=1r/s;

       location ^~ /mobileapp{
             set $no_cache 1;
             # set rate limit by pulkit
            limit_req zone=one burst=1;
            limit_req_status 429;
            error_page  429  /50x.html; 
      }
}

但是,即使不存在标头,也会应用速率限制。 附言userAndroidId 是我的请求标头。

【问题讨论】:

    标签: http nginx http-headers rate-limiting


    【解决方案1】:

    我认为你可以用地图来管理这个。如果标头存在,则将变量映射到客户端的 IP 或空字符串,并将该值用作区域的键。如果映射不匹配,空字符串将防止发生速率限制。

    类似的东西(未经测试,但应该可以)

    map $http_userandroidid $limit {
        default "";
        "~.+" $binary_remote_addr;
    }
    

    这会将一个空的缺少 userAndroidId 标头映射到“”,并将任何其他值映射到 $binary_remote_addr。然后,您可以像这样在您的区域中使用 $limit 变量:

    limit_req_zone $limit zone=one:10m rate=1r/s;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-27
      • 1970-01-01
      • 2021-12-12
      • 2021-03-29
      • 1970-01-01
      • 2013-12-13
      • 1970-01-01
      相关资源
      最近更新 更多