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)

프록시IP 52.196.202.119 에서 실제 User IP인 219.xxx.xxx.xxx으로 변경

☞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 사용 결과

위 php파일 사용 예시

net::ERR_INCOMPLETE_CHUNKED_ENCODING

설정중 위와같은 에러가 나올경우, nginx.conf 파일의 http{} 안에

추가 해줍니다.


출처 : 본인작성

Powered by Blogger.