【 Nginx 】 다운로드, 속도 제한 요청, URL 매개 변수 에 따라 속도 제한

이 장면 은 단일 연결 의 다운로드 속 도 를 제한 하고 단일 IP 의 연결 수 를 제한 하거나 단위 시간 내 요청 수, 실험 환경 nginx 1.9. x 입 니 다.작은 예 를 위주 로 하고 구체 적 인 세부 사항 은 문 서 를 많이 보 세 요.
다운로드 속도 제한
location /download { limit_rate 128k; } 

#             10m      ,  10m   128kb/s           ,  nginx.conf  

location /download { limit_rate_after 10m; limit_rate 128k; }  

IP 연결 및 병발 제한
  • limit_req_zone 단위 시간 내 요청 수 제한
  • limit_req_conn 은 같은 시간 연결 수 를 제한 하 는 데 사 용 됩 니 다
  • 일정 시간 동안 같은 ip 에 접근 하 는 횟수 를 제한 합 니 다.
    http{
        ...
        #      allips limit_req_zone    session,   10M  ,
        # $binary_remote_addr  key,          20 ,       503  
        #1M   16000   ,rete       ,
        #           ,     30r/m
        limit_req_zone $binary_remote_addr zone=allips:10m rate=20r/s;
        ...
        server{
            ...
            location / {
                ...
                #   ip     20   ,   burst 5
                #brust     ,   1 、2,3,4    19 ,
                # 5     25      。
                #      1  25   , 2   20     503  。
                #nodelay,        ,             ,
                # 1 25    ,5      2   ,
                #  nodelay,25      1   。
                limit_req zone=allips burst=5 nodelay;
                ...
            }
            ...
        }
        ...
    }

    위의 설정 에서 key 는 $binary_remote_addr 이 므 로 IP 에 따라 속 도 를 제한 하 는 것 이 라 고 할 수 있 습 니 다. 사실은 IP 뿐만 아니 라 $server_name 등 다른 Nginx 변수 나 사용자 정의 변수 로 수요 에 따라 설정 할 수 있 습 니 다.
    단일 IP 의 같은 시간 연결 수 를 제한 합 니 다.
    http{
        ...
        #      one limit_zone,  10M     session,
        # $binary_remote_addr  key,   IP
        #     http   
        limit_conn_zone  $binary_remote_addr  zone=one:10m;  
        ...
        server{
            ...
            location {
                ...
               limit_conn one 20;          #     ,      503  
               #    ,       ,    ip    ,  500x2k
               #limit_rate 500k; 
                ...
            }
            ...
        }
        ...
    }

    매개 변수 에 따라 uri 의 특수 문자 로 속 도 를 제한 합 니 다.
    사용 자 는 모두 NAT 이후 에 서버 를 연결 하기 때문에 IP 에 따라 제한 할 수 없 지만 모든 사용자 가 방문 할 때의 URL 은 사용자 의 유일한 매개 변 수 를 가지 고 있 기 때문에 이 럴 때 url 매개 변 수 를 사용 하 는 것 이 ip 보다 제한 적 인 의 미 를 가진다.아래 설정 의 의 미 는 /hello 이 요청 에서 lan 매개 변수 와 같은 요청 은 1 초 에 한 번 만 요청 할 수 있 습 니 다. lan 매개 변 수 를 사용자 의 IP 로 비교 할 수 있 습 니 다. 각 IP 는 1 초 에 한 번 만 서버 에 접근 할 수 있 습 니 다.
    다른 선택
  • lua - resty - limit - traffic 는 openresty 의 속도 제한 모듈 을 바탕 으로 lua 를 사용 하여 더욱 복잡 한 업무 통 제 를 실현 합 니 다
  • ngx - limit - req 2 이 친구 가 쓴 C 모듈
  • 테스트 설정
    map $arg_lan $name {
        default $arg_lan;
        "~*python" python;
        "~*golang" golang;
    }
    limit_req_zone $name zone=xspython:10m rate=1r/s;
    server {
        listen       8001;
        server_name  localhost;
        location /hello {
            limit_req_log_level notice;
                limit_req zone=xspython burst=1 nodelay;
            echo hello $name;
        }
        location ~ /hi {
            #     
            echo hi;
        }
    }

    단순 테스트 스 크 립 트
    #!/bin/bash
    #limit_test1.sh
    #orangleliu
    #         key,       
    #        key,       
    #     access.log     
    op=$1
    url="http://127.0.0.1:8001/hello?lan="
    if [ $1 = "1" ];then
        echo "   "
        for i in {1..5};do
            for j in {1..5};do
                curl "${url}python"
            done
            sleep 1
        done
    else
        echo "   "
        lanname=(python java golang c lua)
        for i in {1..5};do
            for j in "${lanname[@]}"; do
                curl "${url}${j}"
            done
            sleep 1
        done
    fi

    좋은 웹페이지 즐겨찾기