Spring Boot Use Forward Headers
Forward Headers
应用有时候需要发送302
重定向或者渲染指向自身的绝对链接。当应用运行在一个反向代理的后端,调用者想要获得的是指向代理的地址,而不是后面主机的物理地址。 通常这个这种情况,代理会通过添加HTTP头来告诉后端应用如何构建指向自己的链接。
如果代理添加了通常约定的X-Forwarded-For
,X-Forwarded-Proto
, 设置server.use-forward-headers
为true
, 就能生成正确的链接。
自定义Tomcat代理配置
如果使用Tomcat,可以自定义携带“forwarded”信息的header头的名字。
|
|
Tomcat还可以配置一个默认的正则表达式来匹配能够信任的内部代理。默认,IP地址在10/8, 192.168/16, 169.254/16 and 127/8是被信任的。 可以自定义这个值
|
|
想要完全控制Tomcat的RemoteIpValve的配置,可以通过关闭自动配置的实例(server.use-forward-headers=false),然后在TomcatEmbeddedServletContainerFactory
Bean中添加一个新的实例。
HttpServletRequest
- getRemoteAddr 获取客户端或者最后发送请求的代理的IP地址
- getRemotePort 获取客户端或者最后发送请求的代理的IP端口
- getRemoteHost 获取客户端或者最终发送请求的代理的全名
- getServerName 获取请求发送到的服务器的Host名
- getServerPort 获取请求发送到的端口号