tomcat 8.5.xx 버전을 사용하는 서버 환경에서 어플리케이션을 호출하는 ip를 로깅해야 할 경우가 생긴다. 기본 설정대로 하면 tomcat의 access log에 실제 클라이언트의 외부 IP가 아닌 ALB의 IP가 찍히게 된다.


아래 설정을 참고하면 ALB가 아닌 외부에 호출하는 실체 client ip가 로깅된다.

server.xml 에서 Valve 설정을 아래와 같이 수정한다.

<Valve className="org.apache.catalina.valves.AccessLogValve"
  ....(중략)
  pattern="%{X-Forwarded-For}i %l %u %t &quot;%r&quot; %s %b %{User-Agent}i"
  ....(중략)
/>

<Valve className="org.apache.catalina.valves.RemoteIpValve"
internalProxies="\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"
remoteIpHeader="x-forwarded-for"
proxiesHeader="x-forwarded-by"
protocolHeader="x-forwarded-proto" />


Remote Ip Valve 설정을 추가할때 모든 IP에 대해 추적하기 위해 정규식을 internalProxies 에 모든 숫자에 대해서 넣었지만, 특정 IP 대역에 대해 추적하려면 해당하는 IP 정규식을 넣으면 된다.


위와 같이 설정시 ALB IP가 아닌 Client IP가 access log에 찍히게 된다.