아파치 로그에 로드밸런서(또는 L4) IP밖에 찍히지 않는경우 LB 또는 L4가 DSR(Direct Server Return)이 아닌 응답또한 LB/L4를 거쳐 가도록 구성되어있기 때문이다. 이런경우 로그에 Access IP Address가 LB/L4 IP밖에 찍히지 않게된다.
root@web:~# cat /var/log/httpd/access.log | cut -d' ' -f-6 ... (생략) 135.79.246.70 - - [28/May/2016:14:58:46 +0900] "GET 135.79.246.70 - - [28/May/2016:14:58:46 +0900] "GET 135.79.246.70 - - [28/May/2016:14:58:46 +0900] "GET 135.79.246.70 - - [28/May/2016:14:58:47 +0900] "GET 135.79.246.70 - - [28/May/2016:14:58:48 +0900] "GET
로드밸런서 또는 L4에 클라이언트 IP를 X-Forwarded-For
헤더 정보로 넘겨주는 설정이 되어 있어야 한다.
아파치 설정 일부를 수정하자.
아래 예시에는 기존의 combined 라인을 주석처리하고 %h
를 %{X-Forwarded-For}i
로 변경하였다.
.... LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combine #LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %O" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent
적용 후 재기동 하게 되면 아래와 같이 로그에 클라이언트 IP가 정상적으로 찍히게 된다.
root@web:~# cat /var/log/httpd/access.log | tail | cut -d' ' -f-6 211.135.246.14 - - [28/May/2016:15:07:00 +0900] "POST 175.135.135.123 - - [28/May/2016:15:07:01 +0900] "POST 40.79.135.54 - - [28/May/2016:15:07:01 +0900] "GET 118.246.135.3 - - [28/May/2016:15:07:01 +0900] "POST 40.135.135.54 - - [28/May/2016:15:07:03 +0900] "GET 211.246.135.33 - - [28/May/2016:15:07:03 +0900] "GET 121.135.246.29 - - [28/May/2016:15:07:13 +0900] "POST 68.135.135.101 - - [28/May/2016:15:07:17 +0900] "GET 36.79.80.150 - - [28/May/2016:15:11:15 +0900] "POST 66.246.79.143 - - [28/May/2016:15:11:18 +0900] "POST