Nginx 유량 제어
5552 단어 Nginx
공식 문서 참조: Module ngxhttp_limit_req_module
키 의 상 태 를 저장 하기 위해 공유 메모리 공간 을 설정 합 니 다. 특히 현재 과 다 한 요청 개수 입 니 다.key 의 값 은 텍스트, 변수 또는 앞의 두 가지 유형 값 으로 구 성 된 비교 결과 일 수 있 습 니 다.요청 중 키 에 대응 하 는 값 이 비어 있 으 면 계산 하지 않 습 니 다.
문법: limitreq_zone key zone=name:size rate=rate;
기본 값: 없 음
문맥: http
예시:
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
limit_req_zone $binary_remote_addr zone=ten:10m rate=10r/m;
server {
......
설명:
다른 클 라 이언 트 IP 주 소 를 저장 하기 위해 텐 이라는 공유 메모리 공간 (zone = ten) 을 설정 하 였 습 니 다.($biary remote addr 는 $remote addr 보다 메모리 공간 을 차지 하 는 것 이 장점 입 니 다. IPv 4 는 4 바이트, IPv 6 는 16 바이트 로 고정 되 어 있 습 니 다. 32 비트 시스템 에 서 는 각 IP 가 32 비트 시스템 에 서 는 64 바이트, 64 비트 시스템 에 서 는 128 바이트 로 상 태 를 저장 합 니 다. 1m 공간 은 32 비트 시스템 에 서 는 1w6 여 개의 IP 상 태 를 저장 할 수 있 고 64 비트 시스템 에 서 는 8k 여 개의 IP 상 태 를 저장 할 수 있 습 니 다)이 공간 은 10m 메모리 (10m) 를 차지 하고 평균 요청 처리 속 도 는 분당 10 개의 요청 (rate = 10r / m) 을 초과 할 수 없습니다.
key 의 수량 을 미리 예측 하여 합 리 적 인 메모리 공간 을 분배 하여 지정 한 메모리 공간 이 소모 되 지 않도록 합 니 다.
속 도 는 요청 수량 / 초 (r / s) 를 사용 하여 지정 합 니 다. 속도 가 초당 하나의 요청 보다 낮 으 면 요청 수량 / 분 (r / m) 을 사용 하여 지정 할 수 있 습 니 다.
문법: limit req zone = name [burst = number] [nodelay];
기본 값: 없 음
문맥: http, server, location
예시:
location /Service {
proxy_pass http://127.0.0.1:8080/Service/1.jsp;
limit_req zone=ten burst=1 nodelay;
limit_req_status 503;
}
설명:
특정 URL 에 사용 할 공유 메모리 공간 (zone = ten) 과 캐 시 대기 열 길이 (burst = 1) 를 설정 합 니 다.
요청 속도 가 공유 메모리 공간 설정 의 요청 실행 속 도 를 초과 하면 과 다 한 요청 은 지연 처 리 됩 니 다. 과 다 한 요청 개수 가 캐 시 대기 열 길 이 를 초과 하면 일부 요청 을 초과 하면 error 로 돌아 갑 니 다.
과도 한 요청 처 리 를 지연 시 키 지 않 으 려 면 nodelay 인 자 를 설정 할 수 있 습 니 다. 이 경우 과도 한 요청 은 error 로 되 돌아 갑 니 다.
문법: limit req log level info | notice | warn | error;
기본 값: limit req log level error;
문맥: http, server, location
설명:
요청 이 과 다 할 때 지연 처리 요청 과 직접 거부 요청 이 error log 에 기 록 된 로그 단 계 를 설정 합 니 다.
주의해 야 할 것 은 지연 처리 요청 로그 단 계 는 직접 거부 한 요청 로그 단계 보다 한 단계 낮 습 니 다. 기본 값 limit req log level error 를 사용 하면 직접 거부 한 요청 은 error 로 그 를 기록 하고 지연 처리 요청 은 warn 로 그 를 기록 합 니 다.
2017/11/01 20:34:44 [warn] 22401#0: *1 limiting requests, excess: 5.352 by zone "ten",
client: 192.168.239.1, server: localhost, request: "GET /Service HTTP/1.1", host: "192.168.239.129"
테스트 할 때 error. log 에 지연 처리 요청 정 보 를 기록 하지 않 습 니 다.
문법: limit req status code;
기본 값: limit req status 503;
문맥: http, server, location
설명:
요청 이 과 다 하 게 거부 되 었 을 때 돌아 오 는 HTTP 상태 코드 입 니 다. access. log 의 로그 기록 은 다음 과 같 습 니 다.
192.168.239.1 - - [01/Nov/2017:20:34:44 -0700] "GET /Service HTTP/1.1" 502
575 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/61.0.3163.100 Safari/537.36"
전체 Nginx 프로필 은 다음 과 같 습 니 다.
worker_processes 1;
error_log logs/error.log notice;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
limit_req_zone $binary_remote_addr zone=ten:10m rate=1r/s;
server {
listen 80;
server_name localhost;
location /Service {
proxy_pass http://127.0.0.1:8080/Service/1.jsp;
limit_req zone=ten burst=5 nodelay;
limit_req_log_level warn;
limit_req_status 502;
}
}
}
ab 설치 및 테스트 진행:
apt-get install apache2-utils
테스트 결 과 를 통 해 알 수 있 듯 이 1s 에서 7 개의 요청 을 보 내 면 모두 6 개의 성공 (1 개의 정상 처리, 5 개의 지연 처리), 1 개의 실패, access. log 를 조회 하면 앞의 6 개의 요청 이 200 으로 돌아 가 고 마지막 요청 은 502 로 돌아 가 는 것 을 볼 수 있 습 니 다.
root@ubuntu:/usr/bin# ab -c 1 -n 7 http://192.168.239.129/Service
This is ApacheBench, Version 2.3
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.239.129 (be patient).....done
Server Software: nginx/1.12.2
Server Hostname: 192.168.239.129
Server Port: 80
Document Path: /Service
Document Length: 59 bytes
Concurrency Level: 1
Time taken for tests: 0.017 seconds
Complete requests: 7
Failed requests: 1
(Connect: 0, Receive: 0, Length: 1, Exceptions: 0)
Non-2xx responses: 1
Total transferred: 2137 bytes
HTML transferred: 527 bytes
Requests per second: 418.19 [#/sec] (mean)
Time per request: 2.391 [ms] (mean)
Time per request: 2.391 [ms] (mean, across all concurrent requests)
Transfer rate: 124.67 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 0 2 4.0 1 11
Waiting: 0 1 3.7 0 10
Total: 0 2 4.0 1 11
Percentage of the requests served within a certain time (ms)
50% 1
66% 1
75% 1
80% 1
90% 11
95% 11
98% 11
99% 11
100% 11 (longest request)
Nginx 설정 을 수정 하여 burst = 5 를 제거 하고 ab 를 다시 사용 하여 테스트 를 진행 하 였 는데 1 개의 요청 만 성공 하 였 고 6 개의 요청 이 실 패 했 습 니 다. access. log 를 보면 첫 번 째 요청 만 200 으로 돌아 가 고 나머지 6 개의 요청 만 502 로 돌아 가 는 것 을 볼 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
linux2에 nginx 설치설치 가능한 nginx를 확인하고, 해당 nginx를 설치한다. localhost 혹은 해당 ip로 접속을 하면 nginx 화면을 볼 수 있다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.