文章目录
  1. 1. Forward Headers
  2. 2. 自定义Tomcat代理配置
  3. 3. HttpServletRequest

Forward Headers

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

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

自定义Tomcat代理配置

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

1
2
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是被信任的。 可以自定义这个值

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

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

HttpServletRequest

  • getRemoteAddr 获取客户端或者最后发送请求的代理的IP地址
  • getRemotePort 获取客户端或者最后发送请求的代理的IP端口
  • getRemoteHost 获取客户端或者最终发送请求的代理的全名
  • getServerName 获取请求发送到的服务器的Host名
  • getServerPort 获取请求发送到的端口号
文章目录
  1. 1. Forward Headers
  2. 2. 自定义Tomcat代理配置
  3. 3. HttpServletRequest
Fork me on GitHub