우선 웹사이트가 공격을 받고 알리바바 클라우드가 경찰에 신고했기 때문에 이 문제가 발생했다고 말씀드리겠습니다. IP 주소를 제한하는 대신 액세스 빈도를 제한하려고 생각했습니다(IP 주소 제한에 대한 계획은 나중에 제공됩니다). 연결 리소스가 소진되었을 때 nginx가 반환하는 상태 코드는 502입니다. 이 솔루션의 제한 사항을 추가하면 일반 상태 코드와 다른 599를 반환합니다.
단계는 다음과 같습니다.
먼저 nginx.conf에 다음 내용을 추가합니다.
map $http_x_forwarded_for $clientrealip { "" $remote_addr; ~^(?p<firstaddr>[0-9\.]+),?.*$ $firstaddr; } ###safe setting to limit the request number per second limit_req_status 599; limit_req_zone $clientrealip zone=allips:70m rate=5r/s;
세션 풀 크기는 70m입니다. 제한된 IP가 많으면 더 작게 조정할 수 있습니다.
초당 5개의 요청을 늘려야 합니다. 이 역시 상황에 따라 조정되며, 5개가 더 적절하거나 조금 더 큽니다.
그런 다음 www.xxoo.com.conf(각 가상 호스트에 대한 lnmp 구성 파일)를 수정합니다. 서버에서 위치 위에 다음 줄을 추가합니다.
limit_req zone=allips burst=5 nodelay;
이 방법으로 nginx를 다시 시작하면 스크립트를 작성할 수 있습니다. 동시성을 테스트합니다.
다음과 같이 Python 동시 스크립트가 제공됩니다.
import threading import time,urllib2 url = 'http://sf.gg/' def worker(): try: response = urllib2.urlopen(url) print response.getcode() except urllib2.httperror, e: print e.code for i in range(2000): t = threading.thread(target=worker) t.start()
2000과 http://sf.gg/ 모두 수정 가능하며, python *.py > out을 실행하여 out 파일의 상태 코드 분포를 분석합니다. , 599가 특히 주파수 제한이 중요한 역할을 한다고 말한다면.
위 내용은 nginx에서 단위 시간당 액세스 빈도를 제한하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!