Nginx 대역 폭 제어

1800 단어 nginxTechnical
Squid 를 통 해 파일 다운로드 기능 을 제공 하 는 오래된 프로젝트 가 있 습 니 다.  delay_parameters 는 대역 폭 통 제 를 실현 합 니 다. 문 제 는 제 가 Squid 를 돌 릴 수 없다 는 것 입 니 다. 그래서 Nginx 에서 비슷 한 기능 을 찾 을 수 있 는 지 계산 하고 있 습 니 다.
좋 은 소식 은 Nginx 가 제 공 했 습 니 다.  limit_rate 와  limit_rate_after, 예 를 들 어 설명 하 자.
location /download/ {
    limit_rate_after 500k;
    limit_rate 50k;
}

사용자 다운로드 가 500 k 에 이 르 면 50k 이내 로 속 도 를 조절 한 다 는 뜻 이다.
나 쁜 소식 은 이 제어 가 단일 연결 에 대한 것 이다.단일 연결 의 대역 폭 만 제한 할 수 있 을 뿐 총 대역 폭 을 제한 할 수 없다 는 얘 기다.다만 사용  limit_conn 모듈 은 어느 정도 문 제 를 완화 할 수 있 습 니 다.
limit_conn_zone $server_name zone=servers:10m;

server {
    location /download/ {
        limit_conn servers 1000;
        limit_rate_after 500k;
        limit_rate 50k;
    }
}

limit 통과 하기conn 은 병렬 연결 수 를 제한 하여 총 대역 폭 을 제한 했다.안 타 깝 게 도 이 해결 방식 은 완벽 하지 않 습 니 다. 여러분 은 다음 과 같은 예 를 상상 할 수 있 습 니 다. 1000 명의 사용자 가 동시에 50k 의 속도 로 다운로드 할 수 있 습 니 다.그렇다면 총 대역 폭 이 변 하지 않 는 상황 에서 2000 명의 사용자 가 동시에 25k 속도 로 다운로드 할 수 있 습 니까?업무 적 인 측면 에서 볼 때 답 은 당연히 긍정 적 이지 만 실제로는 limitconn 과 limitrate 가 유연 하지 않 아서 이런 논 리 를 간단하게 실현 할 수 없습니다.
물론 문 제 는 해결 할 방법 이 있 을 것 이다.예 를 들 어 제3자 모듈 사용: limitspeed;리 눅 스에 내 장 된 TC 명령 도 사용 할 수 있다.limit_speed 는 비교적 간단 합 니 다. 더 이상 말 하지 않 겠 습 니 다. 다음은 TC 의 용법 을 살 펴 보 겠 습 니 다.
shell> tc qdisc add dev eth0 root handle 1: htb default 10
shell> tc class add dev eth0 parent 1: classid 1:1 htb rate 10mbit
shell> tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
       match ip dport 80 0xffff flowid 1:1

TC 복잡 하 게 사람 을 미 치 게 합 니 다. 참고 하 세 요: Linux Advanced Routing & Traffic Control HOWTO.
본 고 는 여러 개의 Nginx 접근 제한 모듈 을 소개 하 였 으 며, 실제로 또 하나 가 있다.  limit_req 모듈 도 훌륭 합 니 다. 본 논문 과 관계 가 크 지 않 지만 'nginx limit req 제한 속도 설정' 을 참고 하 시기 바 랍 니 다.

좋은 웹페이지 즐겨찾기