Nginx 有一个有用的模块,称为ngx_http_limit_req_module
,您可以在其中根据 IP 或请求数限制对服务器的请求。
是否可以对包含自定义标头的位置进行速率限制?例如,我尝试了这个,但它无法启动 nginx。
location /myservice {
if ($http_x_custom_header) {
limit_req zone=one burst=5;
}
}
具体错误是:
nginx: [emerg] "limit_req" 指令在 /etc/nginx/sites-enabled/default 中是不允许的
即它不喜欢if
块内的 limi_req 指令。在 if 块之外很好。
不过,我也许可以在该位置之外使用不同的限制参数集。
你是对的,
limit_req
不能在那个级别上使用。解决方法如下。
418
如果 custom_header 存在,这将返回,nginx 将拦截并发送到自定义位置块,这将应用limit_req