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

WBOY
풀어 주다: 2023-05-15 13:43:06
앞으로
793명이 탐색했습니다.

우선 웹사이트가 공격을 받고 알리바바 클라우드가 경찰에 신고했기 때문에 이 문제가 발생했다고 말씀드리겠습니다. 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으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!