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;
답변
limit_req_zone
지시어는 요청 그룹화 키로 사용할 수있는 변수를 정의합니다.
일반적으로 는 크기가 작고 공간을 절약하기 때문에 $binary_remote_addr
대신 사용됩니다 $remote_addr
.
어쩌면 RealipModule 을 사용하고 싶을 수도 있습니다 .
이렇게하면 원격 주소 변수를 사용자 정의 헤더에 제공된 주소로 다시 쓰며 로깅 및 기타 변수 사용이 더 쉬워집니다.