PHP : X-FORWARDED-FOR(XFF) 사용방법 – NGINX – 2
지난 글(Apache에서 XFF사용법)에 이어 nginx Web Server 에서 XFF 사용 방법 에대해 작성합니다.
nginx 는 –with-http_realip_module 옵션을 주고 컴파일해야 실제 ip 를 얻어올 수 있습니다.
먼저 해당 설정에는 http_realip_module 이 필요하므로 nginx -v 명령어로 지원 여부를 확인 후, http_realip_module이 없다면
–with-http_realip_module 옵션 을 주고 Nginx를 재 컴파일 합니다.
( 일반적으로 -with-http_realip_module 옵션은 기본적으로 되어있습니다. )
☞LogFormat 변경
/etc/nginx/nginx.conf 파일에서 변경이 필요합니다.
1 2 3 4 5 6 7 | log_format main '$http_x_forwarded_for - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent"'; access_log /var/log/nginx/access.log main; systemctl restart nginx // nginx 재실행 |
☞LogFormat 변경후 access.log확인(apache24/logs)
☞GetUserIP() 함수를 만들어 User의 IP를 얻어냅니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <?php function GetUserIP() { if (isset($_SERVER)) { if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) return $_SERVER["HTTP_X_FORWARDED_FOR"]; if (isset($_SERVER["HTTP_CLIENT_IP"])) return $_SERVER["HTTP_CLIENT_IP"]; return $_SERVER["REMOTE_ADDR"]; } if (getenv('HTTP_X_FORWARDED_FOR')) return getenv('HTTP_X_FORWARDED_FOR'); if (getenv('HTTP_CLIENT_IP')) return getenv('HTTP_CLIENT_IP'); return getenv('REMOTE_ADDR'); } $text = GetUserIP(); echo "X_FORWARDED_FOR (Real IP Addr)"; echo "<br>"; echo "Connect Your IP Address : " .$text ; echo "<br>"; echo "NOT X_FORWARDED_FOR (Proxy IP Addr)"; echo "<br>"; $ip = $_SERVER['REMOTE_ADDR']; echo "Connect Your IP Address : " .$ip ?> |
☞NGINX – PHP – XFF 사용 결과
net::ERR_INCOMPLETE_CHUNKED_ENCODING
설정중 위와같은 에러가 나올경우, nginx.conf 파일의 http{} 안에
추가 해줍니다.
출처 : 본인작성