nginx 흐름 제한 방안 의 실현 (세 가지 방식)

4888 단어 nginxlinux
nginx 공식 문 서 를 통 해 동생 은 세 가지 nginx 제한 방식 을 보 았 습 니 다.
1、limit_conn_zone
2、limit_req_zone
3、ngx_http_upstream_module
앞의 두 가 지 는 클 라 이언 트 (즉 단일 ip 제한) 에 만 있 을 수 있 고 문서 도 완전 하지만 테스트 를 통 해 공식 문서 가 말 한 결과 에 이 르 지 못 한 것 으로 나 타 났 다 (동생 의 테스트 방법 에 문제 가 있 을 수 있 음).
여기 서 먼저 앞의 두 가 지 를 간단하게 소개 합 니 다.
1、limit_conn_zone
1.1nginx 설정
http{ 
 limit_conn_zone $binary_remote_addr zone=one:10m; 
 server 
 { 
   ...... 
  limit_conn one 10; 
  ...... 
 } 
} 

그 중에서 'limit conn one 10' 은 server 층 에 두 면 전체 server 에 효과 가 있 을 뿐만 아니 라 location 에 두 면 단독 location 에 만 효과 가 있 습 니 다.이 설정 은 클 라 이언 트 의 병렬 연결 수 는 10 개 에 불과 하 다 는 것 을 나타 낸다.
1.2 결과
ab  20     nginx,    
Complete requests: 20
Failed requests: 9

(nginx 설정 의 ip 병렬 연결 수가 10 이 고 결과 의 성공 수가 + 1 인 이 유 는 알 수 없습니다. nginx 로그 에서 도 9 개의 요청 이 503 으로 돌아 가 는 것 을 볼 수 있 습 니 다)
2、limit_req_zone 2.1 nginx 설정
http{ 
 limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s; 
 server 
 { 
   ...... 
  limit_req zone=req_one burst=120; 
  ...... 
 } 
} 

그 중에서 'limit req zone = req one burst = 120' 은 server 층 에 두 면 전체 server 에 효과 가 있 을 뿐만 아니 라 location 에 두 면 단독 location 에 만 효과 가 있 습 니 다.
rate = 1r / s 는 주소 당 1 초 에 한 번 만 요청 할 수 있다 는 뜻 이다. 즉, 영패 통 burst = 120 에는 모두 120 개의 영패 가 있 고 매 초 에 1 개의 영패 만 추가 되 며 120 개의 영패 가 발급 되면 더 나 온 요청 은 503 으로 돌아간다.
3、ngx_http_upstream_module 3.1 소개
우수한 부하 균형 모듈 로 서 현재 내 가 일 하 는 데 가장 많이 사용 되 고 있다.사실 이 모듈 은 우리 가 필요 로 하 는 백 엔 드 제한 기능 을 제공 합 니 다.공식 문 서 를 통 해 이 모듈 에는 max 라 는 인자 가 있 습 니 다.conns 는 서버 의 흐름 을 제한 할 수 있 지만 아 쉽게 도 상업 판 nginx 에서 만 사용 할 수 있 습 니 다.그러나 nginx 1.11.5 버 전 이후 정 부 는 이 매개 변 수 를 상업 판 에서 벗 어 났 다. 즉, 우리 가 생산 에 광범 위 하 게 사용 되 는 nginx 1.9.12 버 전과 1.10 버 전 을 업그레이드 하면 사용 할 수 있다 (테스트 를 통 해 알 수 있 듯 이 이전 버 전의 nginx 에서 이 매개 변 수 를 더 하면 nginx 서 비 스 는 시작 할 수 없다).3.2 설정
        upstream xxxx{ 
  
 server 127.0.0.1:8080 max_conns=10; 
  
 server 127.0.0.1:8081 max_conns=10; 
  
} 

3.3 결과 (캡 처 불편)
두 대의 기계 로 각각 ab 도구 로 nginx 에 20, 30, 40 개의 동시 다발 요청 을 보 냅 니 다.
동시 다발 에 관 계 없 이 성공 에 대한 요 구 는 12 개 에 불과 하 다 는 것 을 알 수 있다. 성공 횟수 는 2 개 로 늘 어 나 는 동시에 1.2 의 테스트 결과 에서 성공 횟수 도 + 1 이다. 여 기 는 두 대의 기계 이다. 이런 고려 를 바탕 으로 기 계 를 세 대 로 늘 렸 는데 과연 성공 횟수 는 13 개 였 다.여기 서 가상 을 얻 을 수 있 습 니 다. 성공 적 인 요청 수 는 클 라 이언 트 의 + 1 에 따라 + 1 (여 기 는 가설 일 뿐 입 니 다)
주: 그리고 중요 한 몇 가지 가 있 습 니 다.max_conns 는 upstream 의 단일 서버 를 대상 으로 하 는 것 이지 모든 것 이 아 닙 니 다.nginx 에 인자 가 있 습 니 다: workerprocesses,max_conns 는 모든 worker프로 세 스 의
ab 도구 설치 절차 첨부 (전재, 출처 알 수 없 음)
#ab      apr-util ,     : 
yum install apr-util 
#     yum-utils  yumdownload   ,       yumdownload      
yum install yum-utils 
cd /opt
mkdir abtmp 
cd abtmp 
yum install yum-utils.noarch 
yumdownloader httpd-tools* 
rpm2cpio httpd-*.rpm | cpio -idmv 
#             usr    ab      usr     
#       
./ab -c 100 -n 10000 http://127.0.0.1/index.html 
#-c 100  :    100  
#-n 10000  :    10000    

좋은 웹페이지 즐겨찾기