springboot nginx tomcat 显示真实iP

2023年4月4日 559点热度 1人点赞 0条评论
如果使用的是Tomcat,你可以配置用于传输"forwarded"信息的headers名:
server.tomcat.remote-ip-header=x-your-remote-ip-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}。
注 将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"  />
nginx配置
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

 

@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;
    }
}

 

管理员

这个人很懒,什么都没留下

文章评论