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)
评论(0)