>  기사  >  운영 및 유지보수  >  Nginx 제한 요청 속도 구성을 구현하는 방법

Nginx 제한 요청 속도 구성을 구현하는 방법

WBOY
WBOY원래의
2023-11-08 13:46:571405검색

Nginx 제한 요청 속도 구성을 구현하는 방법

Nginx 제한 요청 속도 구성 구현 방법

Nginx는 구성을 통해 요청을 제한하고 제어할 수 있는 고성능 웹 서버입니다. 실제 애플리케이션에서는 서버 리소스를 보호하기 위해 요청 속도를 제한해야 하는 경우가 많습니다. 이 기사에서는 Nginx에서 요청 속도 제한을 구현하는 방법을 소개합니다.

1. HttpLimitReqModule 모듈 사용

Nginx는 요청 속도를 제한하는 데 사용할 수 있는 HttpLimitReqModule 모듈을 제공합니다. 구성을 시작하기 전에 HttpLimitReqModule 모듈이 설치되었는지 확인해야 합니다.

  1. Nginx 구성 파일 편집

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로 제한됨을 의미합니다.

  1. 요청 제한 구성

요청 제한이 필요한 경우 제한_req 지시문을 추가하여 요청 속도를 제한하세요. 예를 들어 요청 속도를 초당 10개 요청으로 제한하려면 다음 구성을 서버 세그먼트에 추가할 수 있습니다.

location / {
    limit_req zone=one burst=5;
    ...
}

limit_req 지시어는 요청 제한을 적용하는 데 사용되며, zone 매개 변수는 사용되는 제한 영역의 이름을 지정합니다. 그리고 버스트 매개변수는 동시에 처리되는 요청 수를 지정합니다. 위 구성은 요청 수가 초당 10개를 초과하면 503 오류가 반환됨을 나타냅니다.

  1. Nginx 구성 다시 로드

구성을 완료한 후 Nginx 구성을 다시 로드해야 적용됩니다. 다음 명령을 사용하여 구성을 확인하고 다시 로드할 수 있습니다.

$ nginx -t    # 检查配置是否正确
$ nginx -s reload    # 重新加载配置

2. ngx_http_limit_req_module 모듈을 사용하세요.

HttpLimitReqModule 모듈 외에도 ngx_http_limit_req_module 모듈을 사용하여 요청 속도를 제한할 수도 있습니다. 이 모듈은 보다 유연한 구성 옵션을 제공합니다.

  1. Nginx 구성 파일 편집

Nginx 구성 파일을 열고 http 세그먼트를 찾은 후 다음 구성을 추가하세요.

http {
    ...
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    
    server {
        ...
    }
}

이 구성은 HttpLimitReqModule 모듈과 동일하며 크기가 1로 명명된 제한 영역을 정의합니다. 요청 속도는 1/초로 제한됩니다.

  1. 요청 제한 구성

요청 제한이 필요한 경우 제한_req 지시문을 추가하여 요청 속도를 제한하세요. 예를 들어 요청 속도를 초당 10개 요청으로 제한하려면 다음 구성을 서버 세그먼트에 추가할 수 있습니다.

location / {
    limit_req zone=one burst=5;
    ...
}

limit_req 지시어는 요청 제한을 적용하는 데 사용되며, zone 매개 변수는 사용되는 제한 영역의 이름을 지정합니다. 그리고 버스트 매개변수는 동시에 처리되는 요청 수를 지정합니다.

  1. Nginx 구성 다시 로드

구성을 완료한 후 Nginx 구성을 다시 로드해야 적용됩니다. 다음 명령을 사용하여 구성을 확인하고 다시 로드할 수 있습니다.

$ nginx -t    # 检查配置是否正确
$ nginx -s reload    # 重新加载配置

3. lua 스크립트를 사용하여 요청 제한 확장

Nginx는 요청 제한을 확장하기 위해 lua 스크립트 사용도 지원합니다. 사용자 정의 Lua 스크립트를 작성하면 보다 유연하고 복잡한 요청 제한 전략을 구현할 수 있습니다.

  1. Lua 모듈 설치

먼저 Nginx Lua 모듈이 설치되어 있는지 확인해야 합니다.

  1. 루아 스크립트 작성

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라는 공유 메모리 영역을 정의합니다.

  1. Nginx 구성 다시 로드

구성을 완료한 후 Nginx 구성을 다시 로드하여 적용하세요.

IV. 요약

이 기사에서는 HttpLimitReqModule 모듈, ngx_http_limit_req_module 모듈 및 lua 스크립트를 사용하여 Nginx 요청 속도 제한을 구현하는 세 가지 방법을 소개합니다. 적절한 구성 및 제한 정책을 통해 서버 자원을 효과적으로 보호하고 악의적인 요청으로 인해 서버에 과도한 부하가 발생하는 것을 방지할 수 있습니다. 실제 애플리케이션에서는 특정 요구 사항에 따라 요청 속도를 제한하는 적절한 방법을 선택할 수 있습니다.

위 내용은 Nginx 제한 요청 속도 구성을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.