./categories/server
LB 뒤 클라이언트 IP (X-Forwarded-For)
Header
X-Forwarded-For: client, proxy1, proxy2
첫 번째 IP = 원 클라이언트.
Apache access log
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" common
Tomcat server.xml
<Valve className="org.apache.catalina.valves.RemoteIpValve" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%{org.apache.catalina.AccessLog.RemoteAddr}r %l %u %t "%r" %s %b" />
RemoteIpValve 없으면: pattern="%{X-Forwarded-For}i ..."
Servlet
String ip = request.getHeader("X-Forwarded-For");
if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip))
ip = request.getRemoteAddr();
else
ip = ip.split(",")[0].trim();
Spring Boot
server.tomcat.remote-ip-header=x-forwarded-for
server.tomcat.protocol-header=x-forwarded-proto
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%{X-Forwarded-For}i %l %u %t "%r" %s %b
Spring Security IP 제한
http.authorizeRequests().antMatchers("/**").access("hasIpAddress('10.24.0.0/16')");
관련 링크: https://djkeh.github.io/articles/Client-ip-over-load-balancer-and-its-access-log-kor/
./comments