안녕하세요.

베스핀글로벌 클라우드기술지원팀 이주원 입니다.


고객 문의 중 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 헤더로 설정해주면 됩니다.


<IfModule remoteip_module>

   RemoteIPHeader X-Forwarded-For

</IfModule>


예시)



변경 전)




변경 후)





이와 같이 구성할 경우 REMOTE_ADDR 에서 HTTP X FORWARDED FOR 헤더 값을 사용할 수 있지만, 더 이상 $_SERVER 값에는 [HTTP_X_FORWARDED_FOR] 값이 표기되지 않으니 상황에 따라 사용하시면 됩니다.





감사합니다.

베스핀글로벌 클라우드기술지원팀

이주원.