Nginx 제한 요청 속도 구성 구현 방법
Nginx는 구성을 통해 요청을 제한하고 제어할 수 있는 고성능 웹 서버입니다. 실제 애플리케이션에서는 서버 리소스를 보호하기 위해 요청 속도를 제한해야 하는 경우가 많습니다. 이 기사에서는 Nginx에서 요청 속도 제한을 구현하는 방법을 소개합니다.
1. HttpLimitReqModule 모듈 사용
Nginx는 요청 속도를 제한하는 데 사용할 수 있는 HttpLimitReqModule 모듈을 제공합니다. 구성을 시작하기 전에 HttpLimitReqModule 모듈이 설치되었는지 확인해야 합니다.
Nginx 구성 파일(일반적으로 /etc/nginx/nginx.conf에 있음)을 열고 http 섹션을 찾아 다음 구성을 추가합니다.
http { ... limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server { ... } }
limit_req_zone은 이름을 정의하는 데 사용되며 제한 영역의 크기, $binary_remote_addr은 클라이언트의 IP 주소를 제한 키워드로 사용함을 나타냅니다. zone=one:10m은 10MB 크기의 제한된 영역을 사용한다는 의미입니다. rate=1r/s는 요청 속도가 초당 1로 제한됨을 의미합니다.
요청 제한이 필요한 경우 제한_req 지시문을 추가하여 요청 속도를 제한하세요. 예를 들어 요청 속도를 초당 10개 요청으로 제한하려면 다음 구성을 서버 세그먼트에 추가할 수 있습니다.
location / { limit_req zone=one burst=5; ... }
limit_req 지시어는 요청 제한을 적용하는 데 사용되며, zone 매개 변수는 사용되는 제한 영역의 이름을 지정합니다. 그리고 버스트 매개변수는 동시에 처리되는 요청 수를 지정합니다. 위 구성은 요청 수가 초당 10개를 초과하면 503 오류가 반환됨을 나타냅니다.
구성을 완료한 후 Nginx 구성을 다시 로드해야 적용됩니다. 다음 명령을 사용하여 구성을 확인하고 다시 로드할 수 있습니다.
$ nginx -t # 检查配置是否正确 $ nginx -s reload # 重新加载配置
2. ngx_http_limit_req_module 모듈을 사용하세요.
HttpLimitReqModule 모듈 외에도 ngx_http_limit_req_module 모듈을 사용하여 요청 속도를 제한할 수도 있습니다. 이 모듈은 보다 유연한 구성 옵션을 제공합니다.
Nginx 구성 파일을 열고 http 세그먼트를 찾은 후 다음 구성을 추가하세요.
http { ... limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server { ... } }
이 구성은 HttpLimitReqModule 모듈과 동일하며 크기가 1로 명명된 제한 영역을 정의합니다. 요청 속도는 1/초로 제한됩니다.
요청 제한이 필요한 경우 제한_req 지시문을 추가하여 요청 속도를 제한하세요. 예를 들어 요청 속도를 초당 10개 요청으로 제한하려면 다음 구성을 서버 세그먼트에 추가할 수 있습니다.
location / { limit_req zone=one burst=5; ... }
limit_req 지시어는 요청 제한을 적용하는 데 사용되며, zone 매개 변수는 사용되는 제한 영역의 이름을 지정합니다. 그리고 버스트 매개변수는 동시에 처리되는 요청 수를 지정합니다.
구성을 완료한 후 Nginx 구성을 다시 로드해야 적용됩니다. 다음 명령을 사용하여 구성을 확인하고 다시 로드할 수 있습니다.
$ nginx -t # 检查配置是否正确 $ nginx -s reload # 重新加载配置
3. lua 스크립트를 사용하여 요청 제한 확장
Nginx는 요청 제한을 확장하기 위해 lua 스크립트 사용도 지원합니다. 사용자 정의 Lua 스크립트를 작성하면 보다 유연하고 복잡한 요청 제한 전략을 구현할 수 있습니다.
먼저 Nginx Lua 모듈이 설치되어 있는지 확인해야 합니다.
Nginx 구성 파일에 다음 구성을 추가하세요.
http { ... lua_shared_dict limit_req_store 10m; server { ... location / { access_by_lua_block { local limit_req = require "resty.limit.req" local lim, err = limit_req.new("limit_req_store", 1, 1) if not lim then ngx.log(ngx.ERR, "failed to instantiate a resty.limit.req object: ", err) return ngx.exit(500) end local key = ngx.var.binary_remote_addr local delay, err = lim:incoming(key, true) if not delay then if err == "rejected" then return ngx.exit(503) end ngx.log(ngx.ERR, "failed to limit req: ", err) return ngx.exit(500) end if delay >= 0.001 then ngx.sleep(delay) end } ... } } }
이 구성은 lua_shared_dict 지시문을 사용하여 10MB 크기의 제한_req_store라는 공유 메모리 영역을 정의합니다.
구성을 완료한 후 Nginx 구성을 다시 로드하여 적용하세요.
IV. 요약
이 기사에서는 HttpLimitReqModule 모듈, ngx_http_limit_req_module 모듈 및 lua 스크립트를 사용하여 Nginx 요청 속도 제한을 구현하는 세 가지 방법을 소개합니다. 적절한 구성 및 제한 정책을 통해 서버 자원을 효과적으로 보호하고 악의적인 요청으로 인해 서버에 과도한 부하가 발생하는 것을 방지할 수 있습니다. 실제 애플리케이션에서는 특정 요구 사항에 따라 요청 속도를 제한하는 적절한 방법을 선택할 수 있습니다.
위 내용은 Nginx 제한 요청 속도 구성을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!