首页
Preview

使用Apache作为Spring Boot嵌入式Tomcat的反向代理

Java Web 应用程序的常见设置是在反向代理配置下使用 Apache 运行 Tomcat。这样就可以让 Apache 处理用户和 Tomcat Web 应用程序之间的所有传入和传出流量。

在上图中,Tomcat 服务器在本地主机接口 (127.0.0.1) 上以默认端口 8080 运行。Apache 和 Tomcat 进程之间的通信是未加密的,这是可以接受的,因为它们都在同一台服务器上运行。

Web 应用程序如何知道它所在的 URL?除非 Apache 转发 HTTP 标头到 Tomcat,否则它不会知道。

这在许多用例中都非常有价值:

  • 应用程序需要向用户发送密码重置和账户确认的链接
  • 已经实现了多租户,我们正在使用子域来识别客户

Spring application.properties

在这里,我们告诉 Spring Boot 在本地主机上运行,默认端口为 8080。我们还指定它应该使用由 Apache 给出的标头,我们将在下一节中配置。

server.address=127.0.0.1
server.port=8080
server.use-forward-headers=true

Apache Virtual Host

我们在虚拟主机中添加以下指令。此示例假设所有内容都从我们的 Spring 应用程序中提供(包括静态文件)。

ProxyPreserveHost on
RequestHeader set X-Forwarded-Proto https
RequestHeader set X-Forwarded-Port 443
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/

应用程序

使用 Spring Boot,我们可以在任何控制器方法参数中添加 HttpServletRequest request,以获取检查请求的能力。

我们可以使用以下方法来确定我们的 URL:

  • getScheme() — 返回协议 (http 或 https)
  • getServerName() — 返回主机名 (例如 cloud.myapp.com)

版权声明:本文内容由TeHub注册用户自发贡献,版权归原作者所有,TeHub社区不拥有其著作权,亦不承担相应法律责任。 如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

点赞(0)
收藏(0)
阿波
The minute I see you, I want your clothes gone!

评论(0)

添加评论