[AWS] 클라우드프론트 + 로드밸런스 + EC2 연동시 사용자IP
CDN 서비스인 클라우드 프론트와 부하분산 서비스인 ELB를 연동 했을때 EC2에선 X_FORWARDED_FOR 값이 어떻게 되는지에 대한 것입니다.
클라우드프론트 ELB EC2 사용자IP 얻기
AWS 구성이 아래와 같을때 사용자의 실제 IP를 얻기 위한 것입니다.
IP부분 참고(괄호안)
유저(1.2.3.4) -> 클라우드프론트(12.13.14.15) -> EBL(12.10.12.92)
PHP로는 아래 변수로 얻을 수 있음
$_SERVER['REMOTE_ADDR'] 는 ELB의 IP가 찍히게 된다.
-> 12.10.12.92
유저IP
실제 사용자IP와 ELB 이전에 있는 클라우드프론트의 IP가 동시 저장된다.
사용자의IP만 얻기 위해선 ,(콤마)로 구분하여 첫번째것을 사용해야 된다.
$_SERVER['HTTP_X_FORWARDED_FOR']
-> 1.2.3.4, 12.13.14.15
아파치 웹로그 저장의 예
12.10.12.92 - - [1/Aug/2023:21:19:01 +0900] "GET / HTTP/1.1" 200 23 "-" "Amazon CloudFront" "test-28382813.ap-northeast-2.elb.amazonaws.com" "1.2.3.4, 12.13.14.15"
PHP에선 아래와 같이 처리 하면 된다.
$userIP = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])[0];
참고URL
https://stackoverflow.com/questions/51393782/how-to-get-client-ip-of-requests-via-cloudfront
** 로드밸런스 서버 설정
- [AWS] EC2 로드밸런스 서버 설정 > AWS.클라우드