X-Forwarded-Host
요청 헤더 Routing

개요

X-Forwarded-Host(XFH)는 클라이언트가 원래 요청했던 Host 헤더 값을, 프록시가 백엔드로 전달하기 위한 사실상 표준 헤더입니다. Forwarded 표준의 `host` 파라미터에 대응합니다.

리버스 프록시가 백엔드로 재요청할 때 Host를 내부 주소(`localhost:3000` 등)로 바꾸는 경우가 많은데, 원래의 공개 도메인은 이 헤더로 보존됩니다.

자세히

백엔드 애플리케이션은 절대 URL 생성(리다이렉트 Location, 이메일 링크, 사이트맵, 정본 URL 등)에 공개 도메인이 필요합니다. 프록시가 Host를 내부 주소로 재작성하면 백엔드는 원래 도메인을 알 수 없으므로, XFH로 `www.example.com`을 전달받아 사용합니다.

이 값은 Host 헤더와 동일한 보안 위험을 공유합니다. 즉 클라이언트가 조작할 수 있으므로, 애플리케이션이 XFH로 절대 URL을 만들면 'Host/Forwarded 헤더 인젝션'을 통해 비밀번호 재설정 링크 등에 공격자 도메인을 심는 피싱·캐시 포이즈닝이 가능합니다.

안전 원칙은 XFF와 동일합니다. 신뢰 경계의 프록시만 이 헤더를 설정하도록 하고, 백엔드는 '허용 호스트 화이트리스트'로 값을 검증한 뒤에만 절대 URL 생성에 사용해야 합니다. 다수 프록시를 거치면 쉼표로 여러 값이 붙을 수 있어 첫 값 해석에도 주의가 필요합니다.

문법

X-Forwarded-Host: <host>[:<port>]

e.g. X-Forwarded-Host: www.example.com

실무 참고

관련 헤더

스펙 근거