nginx의 HttpLimitReqModule을 사용하여 속도 제한을 조사 중 입니다. 그러나 요청은 모두 헤더에 실제 IP 주소가있는 동일한 IP (로드 밸런서)에서 온 것입니다.
X-Forwarded-For
소스의 ip 대신 헤더 의 ip를 기반으로 nginx rate-limit를 설정하는 방법이 있습니까?
nginx의 HttpLimitReqModule을 사용하여 속도 제한을 조사 중 입니다. 그러나 요청은 모두 헤더에 실제 IP 주소가있는 동일한 IP (로드 밸런서)에서 온 것입니다.
X-Forwarded-For
소스의 ip 대신 헤더 의 ip를 기반으로 nginx rate-limit를 설정하는 방법이 있습니까?
답변:
예, 일반적인 속도 제한 구성 정의 문자열은 다음과 같습니다.
limit_req_zone $binary_remote_addr zone=zone:16m rate=1r/s;
$binary_remote_addr
리미터의 고유 키는 어디에 있습니까 ? 헤더 $http_x_forwarded_for
값을 얻는 변수로 변경해야합니다 X-Forwarded-For
. $binary_remote_addr
IP 주소를 저장하기 위해 압축 이진 형식을 사용하고 있기 때문에 메모리 소비가 증가하지만 $http_x_forwarded_for
그렇지 않습니다.
limit_req_zone $http_x_forwarded_for zone=zone:16m rate=1r/s;
$binary_remote_addr
변수가 올바르게 설정됩니다.
limit_req_zone
지시어는 요청 그룹화 키로 사용할 수있는 변수를 정의합니다.
일반적으로 는 크기가 작고 공간을 절약하기 때문에 $binary_remote_addr
대신 사용됩니다 $remote_addr
.
어쩌면 RealipModule 을 사용하고 싶을 수도 있습니다 .
이렇게하면 원격 주소 변수를 사용자 정의 헤더에 제공된 주소로 다시 쓰며 로깅 및 기타 변수 사용이 더 쉬워집니다.
$binary_remote_addr
와 $remote_addr
일반적으로 구성된 헤더의 값으로 설정 X-Forwarded-For
- 귀하의 표준 변수는 이제 "실제 클라이언트 IP 주소"입니다. nginx -V
NGINX가로 빌드되었는지 확인하려면 실행 하십시오 --with-http_realip
. 구성은 다음과 같이 간단합니다. set_real_ip_from 10.0.0.0/8;
real_ip_header X-Forwarded-For;
CIDR 범위는 X-Forwarder-For
헤더를 설정하는 업스트림로드 밸런서의 범위입니다 .