Print
카테고리: [ Apache Tomcat ]
조회수: 39170

1. 개요

AWS ELB에서 Proxy를 활성화 시켜서, Tomcat에서 실제 Client IP를 Log에 기록하게 할 수 있다.


2. 활용

 

 Tomcat의 Access Log에만 남길 경우, Access Log 패턴에 %{X-Forwarded-For}i 추가만 해주면 된다.

#  server.xml

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="access_log" suffix=".log"
               pattern="%{X-Forwarded-For}i %h ..." />

 

 access log 이외에 catalina.out 등 다른 log들에도 반영을 시키려면 RemoteIpValve를 사용하여 아래의 설정을 추가하면 된다.

 

# server.xml

<Engine name="Catalina" defaultHost="localhost">
 
        <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" />
 

=> internalProxies에는 Proxy를 해주는 ELB 또는 서버의 IP 대역이나 IP들을 입력해주면 된다.(정규표현식 적용됨.)

 위의 정규표현식은 모든 IP 대역들에 대해서 Proxy로 인지하는 패턴이다.

 

참고링크: https://confluence.atlassian.com/stashkb/log-the-original-ip-address-when-stash-is-behind-a-load-balancer-652443962.html

참고링크: https://qiita.com/tkprof/items/2ff334b27002c101d022

참고링크: https://tomcat.apache.org/tomcat-8.5-doc/api/org/apache/catalina/valves/RemoteIpValve.html