목차

Apache X-Forwarded-For

개요

아파치 로그에 로드밸런서(또는 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

참조링크