频道
bg

Spring Boot Use Forward Headers

coding二月 14, 20161mins
Spring Boot

Forward HeadersH2

应用有时候需要发送302重定向或者渲染指向自身的绝对链接。当应用运行在一个反向代理的后端,调用者想要获得的是指向代理的地址,而不是后面主机的物理地址。 通常这个这种情况,代理会通过添加HTTP头来告诉后端应用如何构建指向自己的链接。

如果代理添加了通常约定的X-Forwarded-ForX-Forwarded-Proto, 设置server.use-forward-headerstrue, 就能生成正确的链接。

自定义Tomcat代理配置H2

如果使用Tomcat,可以自定义携带“forwarded”信息的header头的名字。

bash

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 and 127/8是被信任的。 可以自定义这个值

bash

server.tomcat.internal-proxies=192\\.168\\.\\d{1,3}\\.\\d{1,3}

想要完全控制Tomcat的RemoteIpValve的配置,可以通过关闭自动配置的实例(server.use-forward-headers=false),然后在TomcatEmbeddedServletContainerFactory Bean中添加一个新的实例。

HttpServletRequestH2

  • getRemoteAddr 获取客户端或者最后发送请求的代理的IP地址
  • getRemotePort 获取客户端或者最后发送请求的代理的IP端口
  • getRemoteHost 获取客户端或者最终发送请求的代理的全名
  • getServerName 获取请求发送到的服务器的Host名
  • getServerPort 获取请求发送到的端口号

评论


新的评论

匹配您的Gravatar头像

Joen Yu

@2022 JoenYu, all rights reserved. Made with love.