요청 제한 구성 전에 몇 가지 "거부" 규칙이 있습니다. 거부 규칙에 따라 차단된 사용자가 사이트를 삭제하는 경우에도 그는 여전히 요청 제한을 트리거하므로 수천 개의 로그 항목이 생성됩니다. 왜? 거부 규칙을 벗어나지 않을 것으로 예상했습니다.
include /etc/nginx/blacklist.conf;
limit_req zone=limit burst=3 nodelay;
로그에는 금지된 오류가 표시되고 그 직후에는 수백 개의 요청 제한 오류가 표시됩니다. 그게 계속해서 반복됩니다.
답변1
nginx가 요청을 처리할 때,여러 단계. 그중 :사전 액세스그리고입장단계.
사전 접속일반적 limit_req
으로 액세스는 allow
/ deny
지시어가 작동하는 곳에서 작동합니다. 이는 속도 제한이 완료되었음을 의미합니다.~ 전에두 지시문이 동일한 컨텍스트에서 선언된 경우 IP 필터링.
따라서 귀하의 의지가 기본 지시어를 사용하여 nginx에서 직접 작동하는 일부 Fail2ban 유사한 프로세스(다른 질문 반환 코드 444 제공)를 얻으려고 시도하는 것이라면 이는 본질적으로 불가능합니다.
답변2
이 문제는 약간 오래되었지만 이 문제가 있는 사람을 위해 내가 찾은 가장 좋은 해결책은 규칙 대신 map
에 a를 사용하는 것입니다(비록 nginx에서는 사용하지 않으려고 노력하지만 ).if
deny
ifs
자비에르 루카스말했다:
IP 필터링 전에 속도 제한이 수행됩니다.
다음에서 파일을 변경할 수 있습니다 blacklist.conf
.
deny 1.2.3.4;
에게:
1.2.3.4 0;
파일 만들기 whitelist.conf
:
if ( $whitelist = 0 ) {
return 403;
}
그런 다음 nginx.conf
에 있는 IP를 제외한 모든 IP를 화이트리스트에 추가하는 맵을 포함합니다 blacklist.conf
.
http {
geo $whitelist {
/etc/nginx/blacklist.conf;
default 1;
}
...
}
마지막으로, nginx.conf
모든 서버 지시어 앞에 다음 whitelist.conf
파일을 추가합니다.
server {
server_name ...;
listen 443 ssl;
include /etc/nginx/whitelist.conf;
ssl_certificate /etc/ssl/bundle.crt;
ssl_certificate_key /etc/ssl/server.key;
...
}
...
블랙리스트에 등록된 IP의 요청은 즉시 반환됩니다.오류 로그 파일에 기록되지 않습니다.
다음을 사용하여 해당 IP의 요청이 액세스 로그 파일에 기록되는 것을 중지할 수도 있습니다.
access_log /path/to/file if=$whitelist;