X-Forwarded-For 헤더를 사용한 nginx 속도 제한


23

nginx의 HttpLimitReqModule을 사용하여 속도 제한을 조사 중 입니다. 그러나 요청은 모두 헤더에 실제 IP 주소가있는 동일한 IP (로드 밸런서)에서 온 것입니다.

X-Forwarded-For소스의 ip 대신 헤더 의 ip를 기반으로 nginx rate-limit를 설정하는 방법이 있습니까?

답변:


28

예, 일반적인 속도 제한 구성 정의 문자열은 다음과 같습니다.

 limit_req_zone  $binary_remote_addr zone=zone:16m rate=1r/s;

$binary_remote_addr리미터의 고유 키는 어디에 있습니까 ? 헤더 $http_x_forwarded_for값을 얻는 변수로 변경해야합니다 X-Forwarded-For. $binary_remote_addrIP 주소를 저장하기 위해 압축 이진 형식을 사용하고 있기 때문에 메모리 소비가 증가하지만 $http_x_forwarded_for그렇지 않습니다.

 limit_req_zone  $http_x_forwarded_for zone=zone:16m rate=1r/s;

방금 동일한 결론에 도달했으며 빠른 테스트에서 정상적으로 작동합니다. 증가 된 메모리 사용량을 지적 해 주셔서 감사합니다.
John Brodie

2
다음과 같은 심각한 보안 문제가있을 수 있습니다. blog.ircmaxell.com/2012/11/anatomy-of-attack-how-i-hacked.html
ircmaxell

symfony에 관한 해당 블로그 게시물의 정보는 다음 주소를 갖습니다
calumbrodie

5
realip 모듈을 사용하면 $binary_remote_addr변수가 올바르게 설정됩니다.
Cenk Alti 2012 년

5

limit_req_zone지시어는 요청 그룹화 키로 사용할 수있는 변수를 정의합니다.
일반적으로 는 크기가 작고 공간을 절약하기 때문에 $binary_remote_addr대신 사용됩니다 $remote_addr.

어쩌면 RealipModule 을 사용하고 싶을 수도 있습니다 .
이렇게하면 원격 주소 변수를 사용자 정의 헤더에 제공된 주소로 다시 쓰며 로깅 및 기타 변수 사용이 더 쉬워집니다.


1
RealIP 모듈의 경우 +1 이 모듈을 사용하는 경우 $binary_remote_addr$remote_addr일반적으로 구성된 헤더의 값으로 설정 X-Forwarded-For- 귀하의 표준 변수는 이제 "실제 클라이언트 IP 주소"입니다. nginx -VNGINX가로 빌드되었는지 확인하려면 실행 하십시오 --with-http_realip. 구성은 다음과 같이 간단합니다. set_real_ip_from 10.0.0.0/8; real_ip_header X-Forwarded-For; CIDR 범위는 X-Forwarder-For헤더를 설정하는 업스트림로드 밸런서의 범위입니다 .
markdsievers
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.