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://qiita.com/tkprof/items/2ff334b27002c101d022
참고링크: https://tomcat.apache.org/tomcat-8.5-doc/api/org/apache/catalina/valves/RemoteIpValve.html