如何在反向代理后面部署spring服务?

如何在反向代理后面部署spring服务?

  • 如果您的应用程序在代理、负载均衡器或云中运行,则请求信息(如主机、端口、方案等)可能会在此过程中发生变化。您的应用程序可能正在 10.10.10.10:8080上运行,但 HTTP 客户端应只能看到 example.org
  • RFC7239 “转发的标头”定义了转发的 HTTP 标头;代理可以使用此标头提供有关原始请求的信息。您可以将应用程序配置为读取这些标头,并在创建链接并将其发送到 HTTP 302 响应、JSON 文档或 HTML 页面中的客户端时自动使用该信息。还有非标准标头,如X-Forwarded-HostX-Forwarded-PortX-Forwarded-ProtoX-Forwarded-SslX-Forwarded-Prefix
  • 如果代理将常用的 X-Forwarded-ForX-Forwarded-Proto添加headers,则将 server.forward-headers-strategy 设置为 NATIVE 就足以支持这些策略。使用此选项,Web 服务器本身本身支持此功能。您可以查看其特定文档以了解特定行为。
  • 您需要确保在反向代理配置中设置了以下标头:X-Forwarded-Prefix
  • 例如,使用 Apache 2,配置:

RequestHeader=set X-Forwarded-Prefix "/custom-path"

  • 然后,在 Spring Boot 应用程序中,确保应用程序处理此标头:X-Forwarded-For。有两种方法可以实现此目的:

server.use-forward-headers=true

  • 如果这还不够,Spring Framework提供了一个ForwardedHeaderFilter.您可以通过设置 server.forward-headers-strategy 设置为 FRAMEWORK,在应用程序中将其注册为 Servlet 过滤器。
  • 从 Spring Boot 2.2 开始,这是处理反向代理标头的新属性:

server.forward-headers-strategy=framework

  • 您可以将以下 Bean 添加到您的应用程序中:
@Bean
ForwardedHeaderFilter forwardedHeaderFilter() {
   return new ForwardedHeaderFilter();
}
posted @ 2022-08-03 14:31  e3tB8Wz7  阅读(1218)  评论(0编辑  收藏  举报