nginx DDoS 공격 에 대한 간단 한 설정

8092 단어 nginx
최근 에 업무 수요 로 인해 DDOS 공격 을 방지 하 는 연 구 를 했 는데 nginx 자체 에 이런 모듈 ngx 가 있 는 것 을 발견 했다.http_limit_req_module 와 ngxhttp_limit_conn_module。
기본 소개
  1.ngx_http_limit_req_module
설정 형식 및 설명:
캐 시 영역 을 설정 하여 서로 다른 key 상 태 를 저장 합 니 다. 이 상 태 는 현재 과 다 한 요청 수 를 말 합 니 다.키 는 variable 에서 지정 한 비어 있 지 않 은 변수 입 니 다. $binary 를 사용 합 니 다.remote_addr, 원본 IP 를 key 값 으로 표시 합 니 다.
limit_req_zone $variable zone=name:size rate=rate;

제 한 될 캐 시 영역 과 최대 요청 이 도착 하면 지연 대기 열 에 몇 개의 요청 이 들 어 갈 지 지정 합 니 다 (다른 것 은 직접 버 립 니 다).요청 수가 상한 선 에 도달 하지 않 고 지연 되 기 를 원 하지 않 으 면 nodelay 를 사용 해 야 합 니 다.
limit_req zone=name [burst=number] [nodelay];

예:
캐 시 영역 은 10M 이 며 요청 은 초당 1 회, 지연 대기 열 은 5 로 제 한 됩 니 다.
http {

    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;



    ...



    server {



        ...



        location /search/ {

            limit_req zone=one burst=5;

        }
}

  2.ngx_http_limit_conn_module
설정 형식 및 설명:
다른 키 의 상 태 를 저장 할 캐 시 영역 을 설정 합 니 다.원본 IP 를 key 로 사용 하여 모든 원본 IP 의 링크 수 를 제한 합 니 다.
limit_conn_zone $binary_remote_addr zone=addr:10m;

제 한 된 캐 시 영역 을 지정 하고 키 마다 링크 개 수 를 지정 합 니 다.
limit_conn zone number;

예:
http {

    limit_conn_zone $binary_remote_addr zone=addr:10m;



    ...



    server {



        ...



        location /download/ {

            limit_conn addr 1;

        }

}

2. 실제 응용
프 록 시 서버 로 서 모든 사용자 의 요청 속도 와 링크 수량 을 제한 해 야 합 니 다. 그러나 한 페이지 에 여러 개의 키 자원 이 있 기 때문에 선택 하지 않 은 것 을 제한 하면 불필요 한 번 거 로 움 이 많이 발생 합 니 다. 예 를 들 어 한 페이지 에 40 개의 키 소스 가 있 기 때문에 한 페이지 를 완전 하 게 표시 하려 면요청 속도 와 연결 수 를 모두 40 으로 조정 하여 사용자 의 정상 적 인 요청 을 막 지 않도록 해 야 합 니 다. 이 제한 은 서버 성능 에 큰 영향 을 주 고 수백 명의 사용자 가 nginx 의 처리 성능 을 끌 어 내 릴 수 있 습 니 다.
그래서 html 페이지 와 같은 어떤 요청 을 해 야 하 는 지 설정 해 야 합 니 다.css, js, 그림 등 제한 이 필요 없 는 것 이 무엇 인지 설정 을 통 해 대응 하 는 location 를 더욱 세분 화해 야 합 니 다.
주: location 소 개 는 마지막 부록 참조
저 희 는 css, js, gif, png, jpg 등 연결 제한 을 하지 않 고 이 를 제외 한 링크 를 제한 합 니 다.
http {

    limit_conn_zone $binary_remote_addr zone=addr:10m;

    limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;



    ...



    server {



        ...



       location ~ .*\.(gif|png|css|js|icon)$ {

            proxy_set_header Host $http_host;

            proxy_set_header X-Real_IP $remote_addr;

            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        }



        location ~* .*\.(jpeg|jpg|JPG)$ {

            proxy_set_header Host $http_host;

            proxy_set_header X-Real_IP $remote_addr;

            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        #    image_filter resize 480 -;

        #    image_filter_jpeg_quality 50;

        #    image_filter_sharpen 10;

        #    image_filter_buffer 4M;

        }



        location / {

            proxy_set_header Host $http_host;

            proxy_set_header X-Real_IP $remote_addr;

            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            #limit

            limit_conn addr 3;

            limit_req zone=one burst=5;

        }

}

 
부록: 위치 설정 에 대한 간단 한 소개 http://blog.sina.com.cn/s/blog_97688f8e0100zws5.html
  
문법 규칙: location [= | ~ | ~ * | ^ ~] / uri / {...}
= 첫머리 는 정확하게 일치 함 을 나타 낸다
 
^ ~ 시작 은 uri 가 일반적인 문자열 로 시작 하여 url 경로 와 일치 하 는 것 으로 이해 하면 됩 니 다.nginx 는 url 에 인 코딩 을 하지 않 기 때문에 / static / 20% / aa 로 요청 합 니 다. 규칙 ^ ~ / static / / aa 에 일치 할 수 있 습 니 다 (빈 칸 주의).
 
대소 문자 구분 정규 일치
 
~*  대소 문 자 를 구분 하지 않 는 정규 일치
 
!~와!대소 문자 의 일치 하지 않 음 과 대소 문자 의 일치 하지 않 음 을 구분 하지 않 는 정규 입 니 다.
 
/ 공통 적 으로 일치 합 니 다. 모든 요청 이 일치 합 니 다.
 
여러 location 설정 의 경우 일치 하 는 순 서 는 (참고 자료 에서 왔 습 니 다. 아직 실제 검증 되 지 않 았 습 니 다. 해 보면 알 수 있 습 니 다. 구 애 받 지 않 고 참고 만 하 십시오) 입 니 다.
 
우선 일치 =, 그 다음 일치 ^ ~, 그 다음은 파일 의 순서 에 따라 정규 일치, 마지막 으로 전달 / 통용 일치.일치 가 성공 하면 일치 하지 않 고 현재 일치 하 는 규칙 에 따라 요청 을 처리 합 니 다.
 
예, 다음 과 같은 일치 규칙 이 있 습 니 다.
 
 
location = / {
   #규칙 A
}
location = /login {
   #규칙 B
}
location ^~ /static/ {
   #규칙 C
}
location ~ \.(gif|jpg|png|js|css)$ {
   #규칙 D
}
location ~* \.png$ {
   #규칙 E
}
location !~ \.xhtml$ {
   #규칙 F
}
location !~* \.xhtml$ {
   #규칙 G
}
location / {
   #규칙 H
}
  
그러면 발생 하 는 효 과 는 다음 과 같다.
 
루트 디 렉 터 리 에 접근 /, 예 를 들 어 http://localhost/ 일치 하 는 규칙 A
 
방문 하 다.  http://localhost/login  일치 하 는 규칙 B, http://localhost/register 일치 하 는 규칙 H
 
방문 하 다.  http://localhost/static/a.html  일치 하 는 규칙 C
 
방문 하 다.  http://localhost/a.gifhttp://localhost/b.jpg  규칙 D 와 규칙 E 가 일치 하지만 규칙 D 순서 가 우선 이 고 규칙 E 가 작 동 하지 않 습 니 다.  http://localhost/static/c.png  규칙 C 에 우선 일치
 
방문 하 다.  http://localhost/a.PNG  규칙 E 는 대소 문 자 를 구분 하지 않 기 때문에 규칙 D 와 일치 하지 않 습 니 다.
 
방문 하 다.  http://localhost/a.xhtml  규칙 F 와 규칙 G 가 일치 하지 않 습 니 다. http://localhost/a.XHTML대소 문 자 를 구분 하지 않 기 때문에 규칙 G 와 일치 하지 않 습 니 다.규칙 F, 규칙 G 는 배제 법 에 속 하고 일치 하 는 규칙 에 부합 되 지만 일치 하지 않 기 때문에 실제 응용 에서 어디 에 사용 되 는 지 생각해 보 세 요.
 
방문 하 다.  http://localhost/category/id/1111  마지막 으로 규칙 H 에 일치 합 니 다. 상기 규칙 이 일치 하지 않 기 때문에 이 때 는 nginx 리 트 윗 요청 이 백 엔 드 응용 서버 에 있어 야 합 니 다. 예 를 들 어 FastCGI (phop), tomcat (jsp), nginx 는 방향 프 록 시 서버 로 존재 합 니 다.

좋은 웹페이지 즐겨찾기