nginx 설정 · 1 min read · Jan 23, 2026
nginx로 속도 제한하기
이 문서에서는 nginx HttpLimitReqModule을 사용하여 주어진 세션에 대한 요청 수를 제한하는 방법을 설명합니다. 예를 들어, 귀하의 사이트가 초당 여러 요청을 수행하는 봇에 의해 공격받아 서버 부하가 증가하는 경우 유용합니다. ngx_http_limit_req_module을 사용하면 속도 제한을 정의할 수 있으며, 방문자가 이 속도를 초과하면 503 오류가 발생합니다.
1 HttpLimitReqModule 사용하기 (ngx_http_limit_req_module)
nginx.conf 파일을 엽니다…
nano /etc/nginx/nginx.conf… 그리고 세션 상태가 저장되는 영역을 정의합니다. 이것은 http {} 컨테이너 내부에 있어야 합니다:
http {
[...]
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
[...]
}이 영역은 one이라고 불리며 10MB의 저장 공간이 할당됩니다. 변수 $remote_addr 대신에 $binary_remote_addr 변수를 사용하여 상태 크기를 64바이트로 줄입니다. 1MB 영역에는 약 16,000개의 상태가 있을 수 있으므로 10MB는 약 160,000개의 상태를 허용하므로 방문자에게 충분할 것입니다. 속도는 초당 하나의 요청으로 제한됩니다. 여기서는 정수 값을 사용해야 하므로, 초당 반 개의 요청으로 제한하고 싶다면 30r/m (30분당 30개의 요청)을 사용해야 합니다.
이 제한을 적용하기 위해 limit_req 지시어를 사용합니다. 이 지시어는 http {}, server {}, 및 location {} 컨테이너에서 사용할 수 있지만, 제 생각에는 요청을 앱 서버(PHP-FPM, mongrel 등)로 전달하는 location {} 컨테이너에서 가장 유용합니다. 그렇지 않으면 이미지, CSS 및 JavaScript 파일이 많은 단일 페이지를 로드할 경우 단일 페이지 요청으로 주어진 속도 제한을 초과할 수 있습니다.
그러니 이것을 location ~ .php$ {} 컨테이너에 넣어봅시다:
[...]
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
limit_req zone=one burst=5;
}
[...]limit_req zone=one burst=5;는 이 속도 제한이 이전에 정의한 세션 저장 영역에 속한다는 것을 지정합니다( zone=one 때문에) 이는 속도 제한이 1r/s임을 의미합니다. 버스트의 의미는 일종의 대기열과 같다고 상상할 수 있습니다. 이는 속도 제한을 초과하면 다음 요청이 지연되며, 대기열에 버스트 매개변수에 지정된 것보다 더 많은 요청이 대기 중일 때만 503 오류가 발생한다는 것을 의미합니다(예: 다음과 같이:

).
이 대기열을 사용하고 싶지 않다면(즉, 누군가 속도 제한을 초과하면 즉시 503을 전달하려면), nodelay 옵션을 사용해야 합니다:
[...]
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
limit_req zone=one burst=5 nodelay;
}
[...]변경 사항을 적용하려면 nginx를 다시 로드하는 것을 잊지 마세요:
service nginx reload2 링크
- nginx: http://nginx.net/
- HttpLimitReqModule: http://nginx.org/en/docs/http/ngx_http_limit_req_module.html
저자에 대하여
Falko Timme는 Timme Hosting(초고속 nginx 웹 호스팅)의 소유자입니다. 그는 HowtoForge의 수석 유지 관리자(2005년부터)이며 ISPConfig의 핵심 개발자 중 한 명(2000년부터)입니다. 그는 또한 O’Reilly의 “Linux System Administration” 책에 기여했습니다.
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.