我正在寻找一种方法来同步 nginx 节点之间的速率受限 IP。我想记录这些 IP,然后将它们推送到数据库并开发一个代理来更新 nginx 配置文件中的阻止 IP。
我的挑战是找到一种方法来通过429
状态代码限制 nginx 的 IP 地址。
那么,是否可以将速率受限的 IP 记录到 nginx 中的特定文件中,或者您是否建议使用任何其他方法来在节点之间同步速率受限的 IP?
答案1
是的,你可以这样做,类似的例子甚至在nginx 文档。
该access_log
指令还接受一个可选if=
参数,该参数评估提供给它的变量,并且仅当结果不为 0 或空字符串时才记录。结合您可以在一个级别中拥有多个指令的事实access_log
,您可以根据需要以不同的方式记录。
不过,首先你需要map
一个HTTP 响应状态您将感兴趣的内容添加到变量中。请记住,map
必须在server
块之外。
map $status $rate_limited {
default 0;
429 1;
}
然后在相关的server
块中声明你的access_log
。
access_log /var/log/nginx/rate_limited.log combined if=$rate_limited;
请记住,任何access_log
在一个级别出现的都会覆盖更高级别的所有其他出现,因此您需要复制(或者更好的是include
)access_log
您也想使用的更高级别的指令。