IP 중복 요청 같은 URL 지정 시간 대 요청 횟수 제한

4424 단어 nginx
nginx IP nginx 는 IP 가 지정 한 시간 대의 요청 횟수 를 제한 할 수 있 습 니 다.
https://blog.csdn.net/xj626852095/article/details/51155875 http{     ...
    #세 션 을 저장 하기 위해 allips 라 는 limit req zone 을 정의 합 니 다. 크기 는 10M 메모리 입 니 다.    #$biary remote addr 를 key 로 하고 1 초 평균 요청 을 20 개 로 제한 합 니 다.    #1M 는 16000 개의 상 태 를 저장 할 수 있 습 니 다. rete 의 값 은 정수 여야 합 니 다.    #요청 을 2 초 동안 제한 하면 30r / m 로 설정 할 수 있 습 니 다.
    limit_req_zone $binary_remote_addr zone=allips:10m rate=20r/s;     ...     server{         ...         location {             ...
            #ip 당 1 초 에 20 개 요청 을 초과 하지 않도록 제한 합 니 다. 누 출 통 수 burst 는 5 입 니 다.            #brust 는 1 초, 2, 3, 4 초 에 19 개 를 요청 하면            #5 초의 요청 은 25 개 로 허용 된다.            #하지만 1 초 에 25 개의 요청 이 있 으 면 2 초 에 20 이 넘 는 요청 은 503 오 류 를 되 돌려 줍 니 다.            #nodelay, 이 옵션 을 설정 하지 않 으 면 평균 속도 제한 요청 수 를 엄 격 히 사용 합 니 다.            #1 초 25 개 요청 시 5 개 요청 을 2 초 에 실행,            #nodelay 를 설정 하면 25 개의 요청 이 1 초 에 실 행 됩 니 다.
            limit_req zone=allips burst=5 nodelay;             ...         }         ...     }     ... }
인터넷 에서 찾 은 것 은 이 설정 뿐 입 니 다. 이것 은 IP 의 요청 속 도 를 제한 할 수 있 습 니 다. 중복 요청 을 구분 할 수 없습니다. 설명 에서 \ # $biary remote addr 를 key 로 하고 평균 초당 요청 을 20 개 로 제한 합 니 다. 그러면 다른 변 수 를 key 로 하면 이 수 요 를 만족 시 킬 수 있 습 니까? 그래서 다음 글 을 찾 았 습 니 다.
https://blog.csdn.net/qwed070/article/details/74994085
arg PARAMETER \ # 이 변 수 는 GET 요청 을 포함 합 니 다. 변수 가 있 으 면 PARAMETER 의 값 입 니 다.  args \ # 이 변 수 는 요청 줄 의 (GET 요청) 인자 와 같 습 니 다. 예 를 들 어 foo = 123 & bar = blahblah;  binary remote addr \ # 바 이 너 리 클 라 이언 트 주소 입 니 다.  body bytes sent \ # 응답 시 보 내 는 body 바이트 수 입 니 다. 연결 이 끊 겨 도 이 데 이 터 는 정확 합 니 다.  content length \ # 요청 헤더 의 Content - length 필드 입 니 다.  content type \ # 요청 헤더 의 Content - type 필드 입 니 다.  cookie COOKIE \ # cookie COOKIE 변수의 값  document root \ # 현재 루트 명령 에서 지정 한 값 을 요청 합 니 다.  document uri \ # uri 와 같 습 니 다.  host \ # 호스트 헤드 필드 를 요청 합 니 다. 그렇지 않 으 면 서버 이름 입 니 다.  hostname #Set to themachine’s hostname as returned by gethostname  http_HEADER  is args \ # args 인자 가 있 으 면 이 변 수 는 '?' 와 같 습 니 다. 그렇지 않 으 면 '빈 값' 과 같 습 니 다.  http user agent \ # 클 라 이언 트 에이전트 정보  http cookie \ # 클 라 이언 트 쿠키 정보  limit rate \ # 이 변 수 는 연결 속 도 를 제한 할 수 있 습 니 다.  query string \ # args 와 같 습 니 다.  request body file \ # 클 라 이언 트 가 주체 정 보 를 요청 하 는 임시 파일 이름 입 니 다.  request method \ # 클 라 이언 트 가 요청 한 동작 은 보통 GET 나 POST 입 니 다.  reote addr \ # 클 라 이언 트 의 IP 주소 입 니 다.  reote port \ # 클 라 이언 트 의 포트 입 니 다.  reote user \ # Auth Basic Module 에서 검 증 된 사용자 이름 입 니 다.  request completion \ # 요청 이 끝나 면 OK 로 설정 합 니 다. 요청 이 끝나 지 않 았 거나 요청 체인 문자열 의 마지막 이 아니라면 비어 있 습 니 다 (Empty).  request method \ # GET 또는 POST  request filename \ # 현재 요청 한 파일 경 로 는 루트 나 alias 명령 과 URI 요청 으로 생 성 됩 니 다.  request uri \ # 요청 매개 변 수 를 포함 하 는 원본 URI 입 니 다. 호스트 이름 은 포함 되 지 않 습 니 다. 예 를 들 어 "/ foo / bar. php? arg = baz" 와 같 습 니 다. 수정 할 수 없습니다.  scheme \ # HTTP 방법 (예: http, https).  server protocol \ # 사용 을 요청 하 는 프로 토 콜 은 보통 HTTP / 1.0 또는 HTTP / 1.1 입 니 다.  server addr \ # 서버 주 소 는 시스템 호출 을 완료 한 후에 이 값 을 확인 할 수 있 습 니 다.  server name \ # 서버 이름 입 니 다.  server port \ # 서버 에 도착 할 포트 번 호 를 요청 합 니 다.
어떻게 IP 와 uri 의 key 를 연결 합 니까? 나 는 따옴표 를 붙 여 두 변 수 를 싸 야 한다 고 생각 했 는데 안 되 는 것 을 발 견 했 습 니 다. 이 방법 이 안 될 줄 알 고 다른 방법 을 찾 아 보 았 지만 찾 지 못 했 습 니 다. 나중에 다시 여기 로 돌아 와 서 두 변 수 를 직접 써 보 았 는데 효과 가 있 을 줄 몰 랐 습 니 다.
최종 설정:
http{     ...
    #세 션 을 저장 하기 위해 allips 라 는 limit req zone 을 정의 합 니 다. 크기 는 10M 메모리 입 니 다.    #$biary remote addr 를 key 로 하고 1 초 평균 요청 을 20 개 로 제한 합 니 다.    #1M 는 16000 개의 상 태 를 저장 할 수 있 습 니 다. rete 의 값 은 정수 여야 합 니 다.    #요청 을 2 초 동안 제한 하면 30r / m 로 설정 할 수 있 습 니 다.
    limit_req_zone $binary_remote_addr$request_uri zone=allips:10m rate=20r/s;     ...     server{         ...         location {             ...
            #ip 당 1 초 에 20 개 요청 을 초과 하지 않도록 제한 합 니 다. 누 출 통 수 burst 는 5 입 니 다.            #brust 는 1 초, 2, 3, 4 초 에 19 개 를 요청 하면            #5 초의 요청 은 25 개 로 허용 된다.            #하지만 1 초 에 25 개의 요청 이 있 으 면 2 초 에 20 이 넘 는 요청 은 503 오 류 를 되 돌려 줍 니 다.            #nodelay, 이 옵션 을 설정 하지 않 으 면 평균 속도 제한 요청 수 를 엄 격 히 사용 합 니 다.            #1 초 25 개 요청 시 5 개 요청 을 2 초 에 실행,            #nodelay 를 설정 하면 25 개의 요청 이 1 초 에 실 행 됩 니 다.
            limit_req zone=allips burst=5 nodelay;             ...         }         ...     }     ... }
 
 
 
 
 

좋은 웹페이지 즐겨찾기