>  기사  >  운영 및 유지보수  >  Nginx를 사용하여 액세스 빈도, 다운로드 속도 및 동시 연결 수를 제한하는 방법

Nginx를 사용하여 액세스 빈도, 다운로드 속도 및 동시 연결 수를 제한하는 방법

王林
王林앞으로
2023-05-15 21:22:221692검색

1. 액세스 빈도, 동시 연결 및 다운로드 속도를 제한하는 데 사용되는 모듈 및 지침 개요

  • ngx_http_limit_req_module: Leaky Bucket 알고리즘을 사용하여 단위 시간당 요청 수, 즉 속도 제한을 제한하는 데 사용됩니다. "leaky bucket"

  • ngx_http_limit_conn_module: 동시에 연결 수, 즉 동시성 제한을 제한하는 데 사용됩니다.

  • limit_rate 및limit_rate_after: 다운로드 속도 설정

leaky bucket 알고리즘(leaky bucket)

Nginx를 사용하여 액세스 빈도, 다운로드 속도 및 동시 연결 수를 제한하는 방법

알고리즘 아이디어는 다음과 같습니다.

  • 물(요청)을 위에서 물통에 붓고 물통 바닥에서 흘러나옵니다(처리)

  • 너무 늦게 흘러나오는 물을 저장합니다. 물통(버퍼)에 담아 일정한 속도로 흘러나옵니다.

  • 물통이 가득 차면 물이 넘칩니다(버리세요).

  • 이 알고리즘의 핵심은 요청을 캐싱하고 일정한 속도로 처리하며 중복된 요청을 직접 삭제하는 것입니다.

  • nginx 요청 속도별 속도 제한 모듈은 누출 버킷 알고리즘을 사용하여 요청의 실시간 처리 속도가 설정된 임계값을 초과하지 않도록 강제로 보장할 수 있습니다

2. URL 액세스 요청 빈도를 제한합니다.

http{ 
    ... 
 
  limit_req_zone $binary_remote_addr zone=one:30m rate=20r/s; 
  limit_req_zone $binary_remote_addr $uri zone=two:30m rate=20r/s; 
  limit_req_zone $binary_remote_addr $request_uri zone=three:30m rate=20r/s; 
  limit_req_status 444; 
    ... 
 
  server{ 
      ... 
 
    limit_req zone=two burst=15 nodelay; 
    ... 
 
  } 
}

설명 :

limit_req_zone $binary_remote_addr zone=one:30m rate=20r/s;

  • $binary_remote_addr은 동일한 클라이언트 IP 주소를 다른 URL로 제한하는 것입니다

  • zone: zone 이름 1이 세션30을 저장합니다. 엠

  • rate : Every 초당 요청 수

limit_req_zone $binary_remote_addr $uri zone=two:30m rate=20r/s;

  • $binary_remote_addr $uri는 동일한 클라이언트 IP 주소를 same url

  • zone: zone 이름 2 Store session30m

  • rate: 초당 조건

limit_req_zone $binary_remote_addr $ Request_uri Zone = Three: 30m Rate = 20R/s의 동일한 클라이언트 IP 주소를 제한합니다. 동일 URL

  • zone: zone 이름 two 매장 세션 30m

  • rate: 초당 요청 수

  • limit_req zone=twoburst=15 nodelay;

zone 참조 영역은 2,

  • burst 크기가 15인 버퍼를 설정합니다. 요청(버스트)이 많이 올 때, 액세스가 위 제한을 초과하면 먼저 버퍼에 배치될 수 있습니다.

  • nodelay는 일반적으로 버스트와 함께 사용됩니다. nodelay를 설정하면 액세스 빈도를 초과하고 버퍼가 가득 차면 503이 직접 반환됩니다. 설정하면 모든 대규모 요청이 대기열에 추가됩니다. 동시 연결 수에 따라

  • 사례 1:

    http { 
      ... 
     
      limit_conn_log_level error; 
      limit_conn_zone $binary_remote_addr zone=addr:10m; 
      limit_conn_status 503; 
     
      ... 
     
      server { 
     
        ... 
     
        location /download/ { 
          limit_conn addr 1; 单个客户端ip限制为1 
        } 
        ... 
     
    }

    사례 2:
  • http{ 
    limit_conn_zone $binary_remote_addr zone=perip:10m; 
    limit_conn_zone $server_name zone=perserver:10m; 
     
      server { 
        ... 
        limit_conn perip 10;  #单个客户端ip与服务器的连接数 
        limit_conn perserver 100; #限制与服务器的总连接数 
      } 
    }

4 다운로드 속도 제한

location /download { 
  limit_rate 128k; 
 } 
 
#如果想设置用户下载文件的前10m大小时不限速,大于10m后再以128kb/s限速可以增加以下配内容 
 
location /download { 
    limit_rate_after 10m; 
    limit_rate 128k; 
 }
.

위 내용은 Nginx를 사용하여 액세스 빈도, 다운로드 속도 및 동시 연결 수를 제한하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제