nginx配置
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
如果使用的是Tomcat,你可以配置用于传输"forwarded"信息的headers名:
server.tomcat.remote-ip-header=x-your-remote-ip-header
server.tomcat.protocol-header=x-your-protocol-header
server.tomcat.protocol-header=x-your-protocol-header
你也可以为Tomcat配置一个默认的正则表达式,用来匹配内部信任的代理。默认情况下,IP地址10/8,192.168/16,169.254/16和127/8是被信任的。通过设置server.tomcat.internal-proxies属性可以自定义,比如:
server.tomcat.internal-proxies=192\\.168\\.\\d{1,3}\\.\\d{1,3}
注 只有在使用配置文件时才需要双反斜线,如果使用YAML,只需要单个反斜线,比如192\.168\.\d{1,3}\.\d{1,3}。
注 只有在使用配置文件时才需要双反斜线,如果使用YAML,只需要单个反斜线,比如192\.168\.\d{1,3}\.\d{1,3}。
注 将internal-proxies设置为空表示信任所有代理,不要在生产环境使用。
你可以完全控制Tomcat的RemoteIpValve配置,只要关掉自动配置(比如设置server.use-forward-headers=false)并在TomcatServletWebServerFactory bean添加一个新value实例。
server:
port: 8080
servlet:
session:
timeout: 60s
tomcat:
max-http-header-size: 8192
internal-proxies: 127\.0\.0\.1
remote-ip-header: X-Forwarded-For
request-attributes-enabled: true
<Valve className="org.apache.catalina.valves.RemoteIpValve"
remoteIpHeader="X-Forwarded-For"
requestAttributesEnabled="true"
internalProxies="127\.0\.0\.1" />
@Configuration
public class TomcatConfig {
@Bean
public TomcatServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
RemoteIpValve value = new RemoteIpValve();
value.setRemoteIpHeader("X-Forwarded-For");
value.setProtocolHeader("X-Forwarded-Proto");
value.setProtocolHeaderHttpsValue("https");
tomcat.addEngineValves(value);
return tomcat;
}
}
文章评论