Heim > Fragen und Antworten > Hauptteil
Wie man Nginx dazu bringt, eine bestimmte IP innerhalb eines bestimmten Zeitraums umzuleiten
Ich habe eine Filterregel geschrieben:
set $trigger 0;
if ($request_body ~ "woaini|admin"){
set $trigger 1;
}
if ($trigger = 1) {
重定向命令
}
Hier liegt ein Problem vor, das heißt, wenn die andere Partei die Bedingungen erfüllt, wird sie umgeleitet, aber wenn Sie sie nach mehreren zehn Sekunden oder einigen Sekunden erneut besuchen, funktioniert die Umleitung nicht.
Was ich möchte ist, dass, wenn die andere Partei diese Regeln zum ersten Mal auslöst, die IP der anderen Partei am nächsten Tag umgeleitet wird, unabhängig davon, ob die Regeln als nächstes ausgelöst werden. Wenn 24 Stunden vergangen sind, dann 解封
, wenn die andere Partei es einen Tag später erneut auslöst, dann leiten Sie es für einen anderen Tag um.
Im Internet heißt es, dass das Modul ngx_white_black_list verwendet wird, aber es ist nicht klar, wo im Quellcode der von der Blacklist auszuführende Befehl geschrieben (umgeschrieben) werden soll. Hier sind die Antworten online:
动态黑名单
要使用该功能必须对 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;
}
...
}
...
}
Hier wird nur 禁止访问
angegeben. Ich bin mir nicht sicher, ob es als Weiterleitung umgeschrieben werden sollte