반응형
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 |