如何在反向代理后面部署spring服务?
如何在反向代理后面部署spring服务?
- 如果您的应用程序在代理、负载均衡器或云中运行,则请求信息(如主机、端口、方案等)可能会在此过程中发生变化。您的应用程序可能正在
10.10.10.10:8080
上运行,但 HTTP 客户端应只能看到example.org
。 - RFC7239 “转发的标头”定义了转发的 HTTP 标头;代理可以使用此标头提供有关原始请求的信息。您可以将应用程序配置为读取这些标头,并在创建链接并将其发送到 HTTP 302 响应、JSON 文档或 HTML 页面中的客户端时自动使用该信息。还有非标准标头,如
X-Forwarded-Host
、X-Forwarded-Port
、X-Forwarded-Proto
、X-Forwarded-Ssl
和X-Forwarded-Prefix
。 - 如果代理将常用的
X-Forwarded-For
和X-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(); }