Cloudflare·로드밸런서 뒤에서 방문자 진짜 IP 얻는 방법
프록시 뒤에 있는 서버가 방문자의 실제 IP를 안전하게 얻는 방법을 Nginx, Node.js, PHP 기준으로 정리했어요.
왜 IP가 다르게 보이나요
사이트 앞에 Cloudflare, 로드밸런서, Nginx 같은 프록시가 있으면 서버에 들어오는 연결은 프록시가 보낸 것이라 방문자 IP 대신 프록시 IP가 보여요. 방문자 IP는 프록시가 붙여 주는 헤더에 들어 있어요.
Cloudflare
Cloudflare는 CF-Connecting-IP 헤더에 방문자 IP 하나를 넣어 줘요. 요청이 정말 Cloudflare에서 왔는지 확인하려면 연결 IP가 Cloudflare가 공개한 IP 대역(cloudflare.com/ips)에 있을 때만 이 헤더를 믿으세요.
X-Forwarded-For
여러 프록시를 거치면 X-Forwarded-For에 IP가 쉼표로 이어 붙어요. 맨 앞 값이 방문자라고 알려져 있지만 방문자가 직접 써 넣을 수도 있어서, 내 프록시가 마지막에 붙인 값부터 거꾸로 세어 믿을 수 있는 위치의 값을 써야 해요.
Nginx
real_ip 모듈로 set_real_ip_from에 내 프록시 대역을 적고 real_ip_header를 CF-Connecting-IP나 X-Forwarded-For로 정하면, 이후 로그와 앱이 방문자 IP를 받아요.
Node.js와 PHP
Express는 app.set("trust proxy", 프록시 수)를 정하면 req.ip가 방문자 IP가 돼요. PHP는 $_SERVER["REMOTE_ADDR"]가 내 프록시일 때만 $_SERVER["HTTP_CF_CONNECTING_IP"]를 쓰세요.
확인하기
설정 후 내 사이트에서 기록된 IP와 IPinfoBox 첫 화면에 나오는 내 IP가 같으면 제대로 된 거예요.
지금 내 IP와 위치를 확인해 보세요.
내 IP 확인