X-Forwarded-For
요청 헤더 Routing

개요

X-Forwarded-For(XFF)는 리버스 프록시·로드밸런서를 거치며 가려진 원 클라이언트의 IP 주소를 뒤쪽 서버에 전달하는 사실상 표준 헤더입니다. Forwarded 표준의 `for` 파라미터에 해당하는, 가장 널리 쓰이는 관행입니다.

값은 IP를 쉼표로 나열하며, 관례상 맨 왼쪽이 원 클라이언트이고 오른쪽으로 갈수록 요청이 지난 프록시들입니다(예: `203.0.113.7, 70.41.3.18`).

자세히

프록시 뒤에서는 서버가 보는 TCP 소스 IP가 프록시의 것이므로, 실제 방문자 IP를 로깅·레이트리밋·지역화에 쓰려면 XFF가 필요합니다. 각 프록시는 자신이 받은 연결의 소스 IP를 목록의 오른쪽 끝에 추가하는 방식으로 체인을 만듭니다.

가장 중요한 함정은 위조입니다. 클라이언트가 임의의 `X-Forwarded-For: 1.2.3.4`를 직접 보낼 수 있으므로, 맹목적으로 맨 왼쪽 값을 '진짜 클라이언트'로 신뢰하면 IP 스푸핑·레이트리밋 우회·접근제어 우회에 노출됩니다. 안전한 규칙은 '신뢰하는 프록시가 붙인 값만 신뢰'하는 것입니다. 즉 신뢰 프록시 수를 알고, 오른쪽에서부터 신뢰 프록시들을 벗겨낸 뒤 남는 첫(가장 오른쪽의 비신뢰) 항목을 실제 클라이언트로 취급합니다.

운영 실무에서는 최외곽 프록시가 클라이언트가 보낸 기존 XFF를 제거하거나 신뢰 목록만 남기도록 설정하고, 프레임워크의 '신뢰할 수 있는 프록시(trusted proxies)' 설정에 CDN·LB의 IP 대역을 등록하는 것이 정석입니다. 표준을 지향한다면 XFF 대신 Forwarded로 이전하는 것도 고려하세요.

문법

X-Forwarded-For: <client>[, <proxy1>[, <proxy2>]]*

e.g. X-Forwarded-For: 203.0.113.7, 70.41.3.18, 150.172.238.178

실무 참고

관련 헤더

스펙 근거