首页 > 如何让nginx对某一个ip在某一时间段内重定向

如何让nginx对某一个ip在某一时间段内重定向

如何让nginx对某一个ip在某一时间段内重定向
我写了一个过滤规则:

set $trigger 0;
if ($request_body ~ "woaini|admin"){
    set $trigger 1;
}
if ($trigger = 1) {
    重定向命令
}

这里有个问题,就是说如果对方满足条件将重定向,可是隔了几十秒或者几秒再访问时,这个重定向就不起作用了。
我是想当对方第一次触发这些规则的时候,让对方的IP在接下来的一天内,无论接下来有没有触发规则,都进行重定向。当过去24小时后,再解封,如果对方在一天后又触发了,那么再对其进行一天的重定向。

网上说的是使用ngx_white_black_list模块,但是不清楚在源码里的哪个位置写上(重写)黑名单所要运行的命令。一下是网上给出的答案:

动态黑名单
    要使用该功能必须对 ngx_http_limit_req_module.c 进行patch
    在ngx_http_limit_req_module.c中
    增加#include <white_black_list.h>
    并修改代码找到:
    "
    if (rc == NGX_BUSY) {
        ngx_log_error(lrcf->limit_log_level, r->connection->log, 0,
                      "limiting requests, excess: %ui.%03ui by zone \"%V\"",
                      excess / 1000, excess % 1000,
                      &limit->shm_zone->shm.name);
        "
    在其下面增加:
    ngx_black_add_item_interface(r, 1);
        配备关键字:
                dyn_black
        格式:
                dyn_black $zone_name time;
        比如:
                dyn_black black 60; //禁止访问60秒,60秒后自动解除
        注意:
                必须要配置black_list
        配置示例:
                http{
                        ....
                        white_black_list_conf conf/black.list zone=black:4m;
                        limit_req_zone $binary_remote_addr zone=one:8m rate=4r/s;
                        ...
                        server {
                                location / {
                 black_list black on;
                 limit_req zone=one burst=6;
                 dyn_black black 60; //禁止访问60秒,60秒后自动解除
                 ...
                 }
                 location /xxx {
                 sec_config on;
                 }
                 ...
                        }
                        ...
                }

这里只给出了禁止访问。不清楚如果改写成重定向


如果要防攻击,应该用iptables,隔断时间清空即可。
如果用Openresty,可以用rewrite_by_lua

【热门文章】
【热门文章】