AWS NLB는 기본적으로 X-Forwarded-For 헤더와 같은 7 계층 관련 기능을 사용할 수 없습니다.
ALB를 사용했을때,
X-Forwarded-For
를 이용해서 사용자의 IP를 확인 할 수 있었지만 NLB로 변경 이후 잘못된 IP를 가져오고 있었습니다. 원인으로 NLB는 4계층 장비로X-Forwarded-For
헤더와 같은 7 계층 관련 기능을 사용할 수 없습니다.
하지만,
target group
의속성
에서Preserve client IP addresses
값을ON
으로 하면 확인이 가능합니다.
현재 구조
sequenceDiagram; autonumber; NLB->>+NGINX: 전달; Note over NLB, NGINX: NLB(4계층 장비) X-Forwarded-For 불가; NGINX->>+ALB: X-Forwarded-For 전달; ALB ->>+API: Client IP 다름; API-->>-ALB: 응답; ALB-->>-NGINX: 응답; NGINX-->>-NLB: 응답;
변경 구조
sequenceDiagram; autonumber; NLB->>+NGINX: 전달; Note over NLB, NGINX: Target Group 옵션 변경; NGINX->>+ALB: X-Forwarded-For 전달; ALB ->>+API: Client IP 확인가능; API-->>-ALB: 응답; ALB-->>-NGINX: 응답; NGINX-->>-NLB: 응답;
NLB를 통한 요청은 X-Forwarded-For에 실제 IP가 아닌, 172.10.X.X 를 넣어서 보내줍니다.
성능 이슈로 ALB에서 NLB로 변경하였지만, 사용자의 IP 확인이 불가능하다면 ALB로 원복해야합니다.