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 |