Comment faire en sorte que nginx redirige une certaine adresse IP dans un certain laps de temps
J'ai écrit une règle de filtrage :
set $trigger 0;
if ($request_body ~ "woaini|admin"){
set $trigger 1;
}
if ($trigger = 1) {
重定向命令
}
Il y a un problème ici, c'est-à-dire que si l'autre partie remplit les conditions, elle sera redirigée, mais lorsque vous reviendrez après des dizaines ou quelques secondes, la redirection ne fonctionnera pas.
Ce que je veux, c'est que lorsque l'autre partie déclenche ces règles pour la première fois, l'adresse IP de l'autre partie soit redirigée le lendemain, que les règles soient ou non déclenchées ensuite. Lorsque 24 heures se sont écoulées, alors 解封
, si l'autre partie le déclenche à nouveau un jour plus tard, redirigez-le pour un autre jour.
Sur Internet, on dit que le module ngx_white_black_list est utilisé, mais on ne sait pas où dans le code source écrire (réécrire) la commande à exécuter par la liste noire. Voici les réponses données en ligne :
动态黑名单
要使用该功能必须对 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;
}
...
}
...
}
Seul 禁止访问
est donné ici. Je ne sais pas s'il doit être réécrit en tant que redirection
Si vous souhaitez éviter les attaques, vous devez utiliser iptables et l'effacer après un certain temps.
Si vous utilisez Openresty, vous pouvez utiliser rewrite_by_lua