Nginx 액세스 주파수 제어
5680 단어 기술.
HTTP 서버 의 스루풋 (단위 시간 스루풋) 은 보통 상한 선 이 있 습 니 다. 특히 일반 설정 한 기 계 는 대역 폭 이 충분 한 상황 에서 압력 측정 도구 로 서버 를 자주 날 릴 수 있 습 니 다. 온라인 환경 안정성 을 위해 악의 적 인 공격 이 다른 사용자 에 게 영향 을 주지 않도록 클 라 이언 트 의 방문 빈 도 를 합 리 적 으로 제한 할 수 있 습 니 다.
제한 원리
제한 원 리 는 어렵 지 않 습 니 다. 한 마디 로 '클 라 이언 트 특징 에 따라 방문 빈 도 를 제한 합 니 다' 라 고 요약 할 수 있 습 니 다. 클 라 이언 트 특징 은 주로 IP, UserAgent 등 을 말 합 니 다.IP 를 사용 하 는 것 이 UserAgent 보다 더 믿 을 수 있 습 니 다. IP 를 조작 할 수 없 기 때문에 UserAgent 는 마음대로 위조 할 수 있 습 니 다.
IP 는 조작 할 수 없 지만 악의 적 인 사람 은 대 리 를 이용 할 수 있 기 때문에 IP 액세스 빈 도 를 제한 하 는 것 만으로 대량의 대리 상황 에 대응 할 수 없다. 또한 IP 액세스 빈 도 를 제한 할 때 도 다 중 사용자 가 네트워크 수출 을 공유 하 는 상황, 예 를 들 어 캠퍼스 네트워크, 기업 랜 네트워크 등 을 고려 해 야 한다.
실천 하 다.
사각 지대 가 존재 해 Nginx 에 액세스 제어 모듈 이 있 는 지 모 르 고 애플 리 케 이 션 코드 에서 Redis 를 사용 해 IP 기반 액세스 주파수 제 어 를 실현 하려 고 했 는데, 코드 작성 을 준비 하기 전에 Nginx 에 IP 기반 액세스 주파 수 를 제한 할 수 있 는 모듈
limit_req
이 있 음 을 알 고 Nginx 를 선택 한 것 은 자신 보다 훨씬 편리 하고 성능 도 우수 할 것 이다.limit_req_zone
Syntax: limit_req_zone key zone=name:size rate=rate;
Default: —
Context: http
$binary_remote_addr
limit_req
사용 할 수 있 습 니 다 limit_req
Syntax: limit_req zone=name [burst=number] [nodelay];
Default: —
Context: http, server, location
limit_req_zone
에 설 정 된 이름 number + 1
이지 만, number 가 0 일 때 모든 요청 을 거부 합 니 다 이해
limit_req_zone
와 limit_req
를 한 후에 이것 은 정말 좋 은 디자인 이 고 그 뒤의 이미지 의 이름 도 알 고 있다.설정 방식 을 알 고 실제 작업 을 시작 합 니 다. Nginx 설정 의 http 에 추가 합 니 다.
limit_req_zone $binary_remote_addr zone=one:2m rate=10r/s;
제한 이 필요 한 server 에 추가:
limit_req zone=one burst=10 nodelay;
공식 문서 에 따 르 면 2M 크기 는 64 비트 시스템 에 약 16000 개의 상태 데 이 터 를 저장 할 수 있 습 니 다. 자신의 개인 사이트 에 충분 합 니 다. 10r / s 즉 1r / 100 ms 는 burst = 10 에 맞 춰 도 OK 이 고 Nginx 를 다시 시작 한 다음 에 압력 측정 도 구 를 사용 하여 검 사 를 해 야 합 니 다.
rate, burst, nodelay 의 서로 다른 특징:
다른 요 소 를 제외 하고 rate 의 크기 는 같은 클 라 이언 트 의 평균 삼투 율 에 결정적 인 역할 을 합 니 다. 한편, burst 와 nodelay 는 업무 수요 에 따라 선택 할 수 있 습 니 다. burst 가 클 수록 받 을 수 있 는 병행 요청 이 많 지만 rate 가 따라 가지 못 하면 대량의 클 라 이언 트 요청 이 시간 을 초과 할 수 있 습 니 다. nodelay 는 rate 가 시간 에 비해 업무 가 순간 적 인 삼투 율 표현 을 향상 시 킬 수 있 습 니 다.
화이트 리스트
IP 접근 주파 수 를 제한 하 는 이 유 는 외부 호출 자의 악성 행 위 를 막 기 위 한 것 이지 만 위 설정 을 거 쳐 시스템 내부 호출 자 에 게 도 제한 이 있 을 수 있 으 므 로 내부 호출 자 를 화이트 리스트 에 올 려 접근 빈도 에 제한 이 없 도록 하고 자 합 니 다.
이 는 주로 Nginx 의 geo 와 map 기능 을 통 해 geo 를 통 해 IP 를 값 으로 매 핑 한 다음 에 map 를 통 해 값 을 변수 나 상수 로 매 핑 합 니 다. 마침
limit_req_zone
에서 key 가 ''
이면 주파수 제한 을 하지 않 는 다 고 표시 하기 때문에 화이트 리스트 사용자 의 key 를 ''
로 설정 해 야 합 니 다.설정 파일 의 http 내용 수정:
geo $limit {
default 1;
127.0.0.1 0; #
172.31.0.0/16 0; #
}
map $limit $limit_key {
0 "";
1 $binary_remote_addr;
}
limit_req_zone $limit_key zone=one:2m rate=10r/s;
총결산
이로써 IP 제한 액세스 주파수 설정 이 완료 되 었 습 니 다. Nginx 에서
limit_req
와 유사 한 것 은 limit_conn
연결 차원 에서 제한 할 수 있 습 니 다. 또한 limit_req
에 대해 두 개의 설정 항목 limit_req_status
과 limit_req_log_level
이 있 습 니 다. 전 자 는 제한 에 이 르 렀 을 때 어떤 상태 코드 를 되 돌려 주 고 후 자 는 제한 에 이 르 렀 을 때 로 그 를 어떤 단계 로 설정 합 니까?제 한 된 정보 가 다른 로그 파일 에 나타 날 수 있 습 니 다.스스로 실현 하려 고 할 때 부터 Nginx 를 사용 하여 실현 하기 까지 서버 에 대한 자신의 이해 가 향상 되 어야 한다 고 느 꼈 다. 검색 과정 에서 Nginx 가 이 기능 을 포함 하고 있 는 것 이 아니 라 합 리 적 인 측면 에서 Nginx 가 이러한 기능 을 포함 하고 있 는 것 으로 추정 할 수 있어 야 한다.
블 로그
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
vim + sed 로 셸 스 크 립 트 파일 정리 하기/etc/sysconfig/network008 009 # Check that networking is up.010 [ ${NETWORKING} = "no" ] && exit 0011 012 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.