주기적으로 스크랩되는 로드 밸런서 뒤에 Nginx/PHP-FPM이 있습니다. 많은 스크레이퍼가 우리 애플리케이션의 404 페이지를 조용히 쳤습니다.
Nginx에 방법이 있나요?속도 제한 모듈아니면 분당 100개 이상의 요청에서 404 오류가 발생한 후 x-forward-for를 기반으로 모든 트래픽을 차단하는 다른 모듈이 있습니까?
내가 찾은 문서제한 요구 모듈페이지 반환 상태가 아닌 리소스를 기반으로 하는 것 같습니다.
트래픽이 충분하여 각 노드가 누가 집단적으로 차단할지에 대해 통신할 필요가 없을 만큼 충분한 404 트래픽을 보고 있습니다.
답변1
Limit_req_zone 모듈을 사용하면 nginx에서 이 작업을 확실히 수행할 수 있습니다.
nginx.conf에서 영역을 설정합니다.
limit_req_zone $binary_remote_addr zone=one:1000m rate=100r/m;
X_Forwarded_For
too 대신에 사용할 수도 있습니다 binary_remote_addr
.
사이트 구성 위치 블록에서 영역을 참조하세요.
limit_req zone=one burst=10 nodelay;
문서: http://nginx.org/en/docs/http/ngx_http_limit_req_module.html
답변2
Fail2ban을 사용하고 nginx와 함께 다음 감옥을 사용하여 잘못 구성된 봇의 속도를 제한할 수 있습니다.
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local 이것을 맨 아래에 추가하십시오
[nginx-req-limit]
enabled = true
filter = nginx-req-limit
action = iptables-multiport[name=ReqLimit, port="http,https", protocol=tcp]
logpath = /var/log/nginx/*error.log
findtime = 600
bantime = 7200
maxretry = 10