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