将 nginx 限速 IP 记录到特定文件中

将 nginx 限速 IP 记录到特定文件中

我正在寻找一种方法来同步 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在一个级别出现的都会覆盖更高级别的所有其他出现,因此您需要复制(或者更好的是includeaccess_log您也想使用的更高级别的指令。

相关内容