proxy server 를 경유한 요청이 nginx server 에 도착했다고 해보자.
nginx server 입장에서는 proxy server 의 ip 만을 전달 받을 것이다. 하지만 만약 실제 사용자의 IP 를 찾고싶다면 어떻게 할까?
이에 대한 이야기를 해보자
nginx 에서는 geoip_proxy_recursive
지시자를 통해서 사용자 원래 IP 주소를 확인 할 수 있다.
http {
geoip_proxy_recursive on;
geoip_proxy_recursive
는 어떻게 이러한 작업을 할 수 있을까?
비밀은 X-Forwarded-For
헤더값을 이용하는 것이다.
X-Forwared-For 헤더는 뭐야...?
X-Forwarded-For: client, proxy1, proxy2
하나의 요청이 여러 프록시들을 거치면, 각 proxy 의 IP 주소들이 X-Forwarded-For
헤더에 차례로 열거된다.
즉, 가장 오른쪽 IP 주소는 가장 마지막에 거친 proxy 의 IP 주소이고, 가장 왼쪽의 IP 주소는 최초 client 의 IP 주소를 의미한다.
nginx 의 geoip_proxy_recursive
지시자는 이 X-Forwarded-For
헤더값을 사용하여 최초 client 의 IP 값을 확인하는 것이다.