안녕하세요.
베스핀글로벌 클라우드기술지원팀 이주원 입니다.
고객 문의 중 ALB 사용 간에 웹서버 Global 변수 중 [REMOTE_ADDR] 변수에 LB의 주소가 확인되어 이를 클라이언트의 IP로 설정할 수 있는 방법을 문의주셨습니다.
관려하여 이번 글을 작성하게 되었습니다.
Question.
현재 L4 ( application ) - EC2 (PHP) 환경으로 구성되어있습니다.
사이트에서 글로벌 변수를 찍어보면 HTTP_X_FORWARDED_FOR 에는 클라이언트의 IP 가 REMOTE_ADDR 에는 L4 의 주소가 찍히는것 같습니다.
혹시 L4 의 설정 변경으로 REMOTE_ADDR 에 접속하는 클라이언트의 IP 를 찍히게 할 수 있을까요??
Answer.
먼저, AWS 의 ELB 서비스를 사용하여 LB를 구성하게 될 때
HTTP/HTTPS 리스너가 있는 ALB 또는 CLB 에서 클라이언트 IP 는 X-Forwarded-For 이라는 HTTP 헤더에 Client IP가 찍히게 됩니다.
따라서 해당 웹서버 내 환경변수를 확인할 때 고객 문의와 같이 [REMOTE_ADDR] 은 ELB의 IP가 찍히고, [HTTP X FORWARDED FOR] 이라는 변수에 실제 Client IP 가 찍히는 것을 확인할 수 있습니다.
Client IP가 필요한 경우 해당 HTTP X FORWARDED FOR 헤더를 사용하면 되지만, 고객님과 같은 경우 REMOTE_ADDR에 해당 헤더 값이 표기되기를 원했습니다.
고객님 환경과 같이 Apache 웹서버를 사용중이실 경우 웹서버의 httpd 구성을 아래와 같이 변경해줍니다.
- /etc/httpd/conf/httpd.conf 에서 rmoteip_module 모듈을 RemoteIPHeader를 X-Forwarded-For 헤더로 설정해주면 됩니다.
RemoteIPHeader X-Forwarded-For
예시)
변경 전)
변경 후)
이와 같이 구성할 경우 REMOTE_ADDR 에서 HTTP X FORWARDED FOR 헤더 값을 사용할 수 있지만, 더 이상 $_SERVER 값에는 [HTTP_X_FORWARDED_FOR] 값이 표기되지 않으니 상황에 따라 사용하시면 됩니다.
감사합니다.
베스핀글로벌 클라우드기술지원팀
이주원.