>운영 및 유지보수 >엔진스 >nginx에서 단위 시간당 액세스 빈도를 제한하는 방법

nginx에서 단위 시간당 액세스 빈도를 제한하는 방법

WBOY
WBOY앞으로
2023-05-15 13:43:06808검색

우선 웹사이트가 공격을 받고 알리바바 클라우드가 경찰에 신고했기 때문에 이 문제가 발생했다고 말씀드리겠습니다. 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 = &#39;http://sf.gg/&#39;
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제