http header - X-Forwarded-For

김철준·2025년 6월 6일
0

http

목록 보기
1/1

사내에서 특정 IP 목록일 경우에만 동작해야하는 feature가 있다.

해당 feature를 구현하기 위한 흐름은
1. 프론트에서 백엔드로 API 요청하여 허용된 IP 여부를 확인한다.
2. 프론트에서 API 응답 여부에 따라 feature를 구현한다.

백엔드에서는 클라이언트의 원 IP를 구분하기 위해서 X-Forwarded-For라는 요청 헤더로 IP 값을 받는다.

IP를 구분하기위해 이 헤더값을 이용하는 이유는 X-Forwarded-ForHTTP 프록시나 로드 밸런서를 통해 웹 서버에 접속하는 클라이언트의 원 IP 주소를 식별하는 사실상의 표준 헤더이기 때문이다.

사내에서는 도메인을 타고 들어오면 Nginx를 통해 사내 서버들에 라우팅해줄 것이다. 때문에 IP를 식별하기 위한 방법으로 X-Forwarded-For를 사용하는 것이 적절하다고 생각된다.

X-Forwarded-For는 프론트에서 직접 헤더값을 설정해줄 필요가 없다. 이는 알아서 헤더가 설정되어 들어간다고 한다.

백엔드에 들어오는 값으로는 쉼표로 구분하여 들어오고 원 IP가 첫번째 값으로 프록시 서버 IP 갯수에 따라 다음 값들로 들어오게 된다.

X-Forwarded-For: <client>, <proxy1>, <proxy2>

<client>
클라이언트 IP 주소

<proxy1>, <proxy2>
하나의 요청이 여러 프록시들을 거치면, 각 프록시의 IP 주소들이 차례로 열거된다. 즉, 가장 오른쪽 IP 주소는 가장 마지막에 거친 프록시의 IP 주소이고, 가장 왼쪽의 IP 주소는 최초 클라이언트의 IP 주소다.

express를 사용하고 있다고 했을 때,백엔드에서는 다음처럼 헤더값으로 아이피를 구분하면 된다.

app.use((req, res, next) => {
  console.log(req.headers['x-forwared-for']); // "true"
  next();
});

HTTP 요청 헤더 이름은 대소문자를 구분하지 않기 때문에, 대부분의 서버(예: Node.js/Express, Nginx 등)는 내부적으로 모든 헤더 키를 소문자로 정규화(normalize)해서 관리한다고 한다.

profile
FE DEVELOPER

0개의 댓글