본문 바로가기

리눅스

nginx에서 limit_conn 및 limit_req 모듈 사용하기

반응형

nginx에서 limit_conn 및 limit_req 모듈 사용하기

nginx의 limit_conn 및 limit_req 모듈은 서버의 요청을 제어하고 과도한 연결 및 요청으로부터 서버를 보호하는 데 사용됩니다. 이러한 기능을 사용하면 서버의 성능을 유지하면서 DDoS 공격 및 과도한 트래픽으로 인한 서버 과부하를 방지할 수 있습니다.

limit_conn 모듈

특정 클라이언트(IP)별로 동시 연결 수를 제한합니다.(클라이언트의 동시 연결 수를 제한)

$ vim /etc/nginx/nginx.conf
http {
...
    # "ddos_conn"이라는 limit zone 정의 (메모리 크기 10MB)
    limit_conn_zone $http_x_forwarded_for zone=ddos_conn:10m;
    limit_conn_zone $server_name zone=rate_conn:10m;
    limit_conn_log_level info;
    limit_conn_status 571;
...
}
$ vim /etc/nginx/conf.d/default.conf
server {
    listen 80;
...
    # 클라이언트당 최대 10개의 동시 연결 허용
    limit_conn ddos_conn 10;
...
}
  • limit_conn_zone : 연결을 추적할 변수를 정의합니다. $binary_remote_addr는 클라이언트 IP 주소를 사용합니다.
  • limit_conn : 특정 zone에 대해 동시 연결 수를 제한합니다.

limit_req 모듈

클라이언트의 요청 속도를 제한하여 요청 처리량을 조절합니다. 이 모듈을 사용하면 1초에 특정한 요청 수 이상을 넘기지 않도록 제한할 수 있습니다.(클라이언트의 요청 속도를 제한)

$ vim /etc/nginx/nginx.conf
http {
...
    # "ddos_req"이라는 요청 속도 제한 zone 정의 (메모리 크기 10MB)
    limit_req_zone $http_x_forwarded_for zone=ddos_req:10m rate=5r/m;
    limit_req_log_level info;
    limit_req_status 571;
...
}
$ vim /etc/nginx/conf.d/default.conf
server {
    listen 80;
...
    # 요청 속도 제한 설정
    limit_req zone=ddos_req burst=10 nodelay;
...
}
  • limit_req_zone : 클라이언트 IP를 기준으로 요청 속도를 제한하는 zone을 정의합니다. rate=5r/s는 초당 5개의 요청을 허용한다는 의미입니다.
  • limit_req : 요청 속도를 제한합니다. burst=10은 설정된 속도보다 초과할 수 있는 요청의 최대 수를 의미하며, nodelay는 대기 없이 즉시 처리합니다.

주요 옵션

  • limit_conn_zone : 연결을 추적할 변수를 정의합니다.
  • limit_conn : 정의된 zone에 대해 동시 연결 수를 제한합니다.
  • limit_req_zone : 요청 속도 제한을 설정할 변수를 정의합니다.
  • limit_req : 요청 속도를 제한하고 버스트(burst) 및 대기 설정을 제어합니다.

모듈 설치 확인

기본적으로 nginx에 이 모듈이 포함되어 있습니다.

nginx -V 2>&1 | grep -- 'http_limit_conn_module\|http_limit_req_module'

 

참고URL

- nginx docs : Module ngx_http_limit_conn_module

- nginx docs : Module ngx_http_limit_req_module

 

728x90
반응형

'리눅스' 카테고리의 다른 글

리눅스 password hashing 알고리즘 변경하기  (0) 2020.10.05
[명령어] grep, egrep, fgrep 명령어  (2) 2020.10.05
docker rmi 명령어  (0) 2020.10.05
docker system prune 명령어  (0) 2020.10.05
docker rm 명령어  (0) 2020.10.05