[WEB] X-Forwarded 헤더는 무엇일까?

2024. 8. 7. 16:06·Linux
728x90

X-Forwarded-For, X-Forwarded-Port, X-Forwarded-Proto 헤더는 클라이언트가 프록시 서버를 거쳐 웹 서버에 요청을 보낼 때 원본 클라이언트의 정보를 전달하기 위해 사용되는 HTTP 헤더입니다.

잘 사용할 것 같지 않지만 꼭 알고는 있어야 하는 기능입니다.

 

❏ X-Forwarded-For

  • 정의: 클라이언트의 원본 IP 주소를 나타냅니다.
  • 사용: 프록시 서버나 로드 밸런서가 클라이언트 요청을 받을 때, 이 헤더에 클라이언트의 실제 IP 주소를 추가합니다. 여러 프록시를 거치는 경우, IP 주소들이 쉼표로 구분되어 추가됩니다.
  • 예시: X-Forwarded-For: 192.168.1.1, 203.0.113.5
    (192.168.1.1은 원본 클라이언트의 IP 주소, 203.0.113.5는 중간 프록시의 IP 주소입니다.)

 

❏ X-Forwarded-Port

  • 정의: 클라이언트가 원래 요청을 보낸 포트를 나타냅니다.
  • 사용: 프록시 서버가 클라이언트의 요청을 받을 때, 이 헤더에 클라이언트가 사용한 포트를 추가합니다. 이 정보를 통해 서버는 클라이언트의 원래 요청 포트를 확인할 수 있습니다.
  • 예시: X-Forwarded-Port: 443
    (여기서 443은 클라이언트가 HTTPS 요청을 위해 사용한 포트입니다.)

 

❏ X-Forwarded-Proto

  • 정의: 클라이언트가 원래 요청을 보낸 프로토콜을 나타냅니다.
  • 사용: 프록시 서버가 클라이언트의 요청을 받을 때, 이 헤더에 클라이언트가 사용한 프로토콜(HTTP 또는 HTTPS)을 추가합니다. 이를 통해 서버는 원래 요청이 안전한 연결을 통해 전송되었는지 여부를 확인할 수 있습니다.
  • 예시: X-Forwarded-Proto: https
    (여기서 https는 클라이언트가 HTTPS 프로토콜을 사용해 요청을 보냈음을 나타냅니다.)

 

❏ 설정은 어디서?

이 설정은 주로 프록시 서버나 로드 밸런서에서 설정되지만 Apache, nginx에서도 이를 처리하도록 할 수 있습니다.

Apache, nginx의 설정 방법 예시는 하단에 작성하였습니다.

 

❏ 설정 방법 예시

Apache

# vi **/apache/conf/extra/httpd-vhost.conf

<VirtualHost *:80>
    ProxyPreserveHost On
    ProxyPass / http://backend-server/
    ProxyPassReverse / http://backend-server/

    # Ensure the original client IP is forwarded
    ProxyAddHeaders On
</VirtualHost>

LoadModule remoteip_module modules/mod_remoteip.so

<IfModule mod_remoteip.c>
    RemoteIPHeader X-Forwarded-For
    RemoteIPInternalProxy 10.0.0.0/8
</IfModule>

 

 

Nginx

$ vi **/nginx/conf/nginx.conf

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    # Forward client information to backend servers
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Port $server_port;

    server {
        listen 80;

        location / {
            proxy_pass http://backend-server;
        }
    }
}

 

❏ 요약 포인트

  • X-Forwarded-For: 원본 클라이언트의 IP 주소를 나타냄.
  • X-Forwarded-Port: 원본 클라이언트가 사용한 포트를 나타냄.
  • X-Forwarded-Proto: 원본 클라이언트가 사용한 프로토콜을 나타냄.

728x90

'Linux' 카테고리의 다른 글

[Infra] HTTPS, SSL 도메인 인증서 교체 방법 및 주의 사항  (2) 2024.09.03
[NGINX] NGINX설치 방법 (Linux)  (0) 2024.08.27
[Tomcat] Tomcat, web.xml 적용이 안되는 이유  (0) 2024.07.18
[Nginx] Nginx에서 upstream을 이용해 부하 분산 하기  (0) 2024.07.17
[Jenkins] Gradle 버전 신규 추가 방법  (0) 2024.07.16
'Linux' 카테고리의 다른 글
  • [Infra] HTTPS, SSL 도메인 인증서 교체 방법 및 주의 사항
  • [NGINX] NGINX설치 방법 (Linux)
  • [Tomcat] Tomcat, web.xml 적용이 안되는 이유
  • [Nginx] Nginx에서 upstream을 이용해 부하 분산 하기
정주원
정주원
개인블로그
  • 정주원
    Joon.eng
    정주원
  • 전체
    오늘
    어제
    • 분류 전체보기 (77)
      • Linux (41)
      • Windows (0)
      • Network (4)
      • Database (0)
      • Cloud (23)
      • Docker (3)
      • Ansible (2)
      • Etc (4)
  • 블로그 메뉴

    • 링크

      • GITLAB(woni)
    • 공지사항

    • 인기 글

    • hELLO· Designed By정상우.v4.10.0
    정주원
    [WEB] X-Forwarded 헤더는 무엇일까?

    개인정보

    • 티스토리 홈
    • 포럼
    • 로그인
    상단으로

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.