nginx 에서 단위 시간 내 에 방문 빈 도 를 제한 하 는 튜 토리 얼 을 실현 합 니 다.

1641 단어
먼저 이 문 제 를 겪 은 것 은 사이트 가 공격 을 당 했 기 때 문 입 니 다. 아 리 클 라 우 드 는 ip 을 제한 하 는 것 이 아니 라 방문 빈 도 를 제한 해 야 한 다 는 생각 을 했 습 니 다.nginx 연결 자원 이 비 워 진 상태 코드 는 502 이 며, 이 방안 의 제한 을 추가 한 후 599 로 돌아 가 정상 상태 코드 와 구별 합 니 다.절 차 는 다음 과 같다.
먼저 nginx. conf 에 다음 과 같은 내용 을 추가 합 니 다.

map $http_x_forwarded_for  $clientRealIp {
    "" $remote_addr;
    ~^(?P[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;


session 풀 크기 70M 입 니 다. 제 한 된 ip 이 많 으 면 줄 일 수 있 습 니 다. 제 한 된 ip 이 적 으 면 방문 할 수 있 는 ip 이 많 으 면 초당 5 개의 요청 을 늘 려 야 합 니 다. 이것 도 상황 에 따라 조절 되 는 것 입 니 다. 5 개 는 적당 하거나 조금 큰 것 입 니 다.
그리고 www. xxoo. com. conf (이것 은 lnmp 가 모든 가상 호스트 에 설정 파일 이 있 음) server 를 수정 합 니 다. location 에 다음 줄 을 추가 합 니 다.

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 가 특히 말 을 많이 하면 주파수 제한 이 작용 합 니 다.

좋은 웹페이지 즐겨찾기