根据位置和帖子标题限制 nginx 速率

根据位置和帖子标题限制 nginx 速率

Nginx 有一个有用的模块,ngx_http_limit_req_module 您可以根据 IP 或请求数量限制对服务器的请求。

是否有可能对包含自定义标头的位置进行速率限制?例如,我试过这个,但无法启动 nginx。

location /myservice {
    if ($http_x_custom_header) {
      limit_req zone=one burst=5;
    }
}

具体错误是:

nginx:[emerg] /etc/nginx/sites-enabled/default 中不允许使用“limit_req”指令

即它不喜欢块内的 limi_req 指令if。在 if 块外则没问题。

不过,我可能能够适应该位置之外的不同限制参数集。

答案1

你是对的,limit_req不能在那个级别使用。

解决这个问题的方法如下。

error_page 418 = @limitreq;

location /myservice {
    if ($http_x_custom_header) {
      return 418;
    }
}

location @limitreq {
    limit_req zone=one burst=5;
    <rest of config>
    }

如果 custom_header 存在,则返回418,nginx 将拦截并发送到自定义位置块,然后应用limit_req

相关内容