在 Apache SSL 代理后面嵌入 Tomcat 的 Spring Boot

Posted

技术标签:

【中文标题】在 Apache SSL 代理后面嵌入 Tomcat 的 Spring Boot【英文标题】:Spring Boot with embedded Tomcat behind Apache SSL proxy 【发布时间】:2022-01-19 14:41:35 【问题描述】:

我正在寻找一种能够在 Apache SSL 代理之后运行 Spring 应用程序的解决方案。我尝试了很多配置都没有成功。所有 Spring 响应都转到 http,导致 Not Found 错误。

以下是apache配置:

         SetEnv proxy-initial-not-pooled 1
         ProxyPreserveHost On
         KeepAlive On
         SSLProxyVerify none
         SSLProxyCheckPeerCN off
         SSLProxyCheckPeerName off
         SSLProxyCheckPeerExpire off
         ServerName server.mydomain.dom
         ProxyTimeout 600
         ProxyPass  /excluded !
        RequestHeader set X-Forwarded-Proto https
        RequestHeader set X-Forwarded-Port 443

         ProxyPass / http://127.0.0.1:8081/
         ProxyPassReverse / http://127.0.0.1:8081/

这些是 Spring 选项:

server.port=8081
server.forward-headers-strategy=NATIVE
#server.tomcat.redirect-context-root=false
server.tomcat.remote_ip_header=x-forwarded-for
server.tomcat.protocol_header=x-forwarded-proto
server.tomcat.internal-proxies=.*

我在 Apache Tomcat/9.0.54 上使用 Spring Boot 2.5.6。 OS Apache 是在 Debian 9.13 上运行的 2.4.25 版本。

问题似乎是在登录应用程序并注销后发生的。如果我在登录操作后将 http 替换为 https,则可以导航到应用程序。在我注销之前,所有链接都可以正常工作。当我注销时,应用程序再次转到 http。

【问题讨论】:

【参考方案1】:

我解决了这个问题。第一步是添加

server.tomcat.use-relative-redirects=true

application.properties 中。使用此指令,代理可以正常工作。

最后,我将 apache/应用程序配置为使用 AJP。

【讨论】:

以上是关于在 Apache SSL 代理后面嵌入 Tomcat 的 Spring Boot的主要内容,如果未能解决你的问题,请参考以下文章

如何在带有 SSL 的 nginx 反向代理后面正确运行 BeEF

具有SSL终止的Apache前向代理

使用 apache2 ssl 代理的 Elasticsearch

使用和不使用 SSL 的 Apache 反向代理之间行为不同的原因

在安全的反向代理后面运行sonarqube时,“请求中的CSRF错误”

配置 apache 服务器以代理 SSL 连接时出现问题