如何为 Spring Boot 应用程序配置嵌入式 Tomcat 虚拟主机?

Posted

技术标签:

【中文标题】如何为 Spring Boot 应用程序配置嵌入式 Tomcat 虚拟主机?【英文标题】:how to configure Embedded Tomcat virtual host for Spring Boot Application? 【发布时间】:2016-02-10 00:59:12 【问题描述】:

我的 centos vps 上有多个域(通过虚拟主机配置在 apache http 服务器上运行的域)。还有相同的 vps,我想添加我的新域,但该域将路由我的 spring boot 应用程序(应用程序是一个 jar 文件,也在嵌入式 tomcat 内)。我找不到嵌入式 tomcat 特定域和端口的任何配置。

独立的Tomcat我可以通过server.xml文件like this image进行配置

这个简短的教程还显示了 stadalone tomcat Tomcat Virtual Host Configuration 的配置

但是我怎样才能为嵌入式 Tomcat 进行该配置?有什么建议吗?

【问题讨论】:

大部分配置在 application.properties 中可用,它在内部更新 server.xml。要更改的属性在 thttp://docs.spring.io/spring-boot/docs/current/reference/html/howto-embedded-servlet-containers.html 中给出(所有与 server.tomcat 相关的属性都与那) 感谢您的回答。我已经阅读了该页面,也阅读了常见的 application.properties [链接] (docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/…),但无法解决我的问题。我还在stackoweflow [link] (***.com/questions/23946369/…) 上找到了这个问题,这个问题的答案是server.address=,但我在同一台机器上有一个ip 和多个域.. 多个域意味着我没有得到它。是多主机吗?如果你能举个例子,给出答案会很有帮助。 我的意思是,我有一台虚拟专用服务器。在该服务器上,我有 www.burakkayacan.comtest.burakkayacan.com 域。 apache httpserver 通过 apacahe http 虚拟主机配置接收该域请求并路由不同的文件夹。而且我在特定文件夹内的 vps 上有 spring boot 应用程序。当我在浏览器上输入 blog.burakkayacan.com 时,该请求应该路由 spring boot application.i can that config。但是 server.xml 文件中的独立 tomcat 虚拟主机配置在 xml 中添加主机节点(i.stack.imgur.com/SXsA7.jpg)但不能用于 spring boot ? 【参考方案1】:

使用 Spring Boot 嵌入式 Tomcat,每个 servlet 容器仅托管一个应用程序。所以我认为 Tomcat 的虚拟主机概念完全没有意义。

如果您必须在共享的 Tomcat 实例上托管您的应用,只需构建没有嵌入式容器的 WAR。

【讨论】:

感谢您的回答。在我的 vps 上有一个 apache http 服务器和该服务器上的三个域。我通过虚拟主机 conf 文件配置了这些域。我还有一个博客网站,它是 Spring Boot 应用程序。但是为什么我不能通过 application.properties 文件或 EmbeddedServletContainerAutoConfiguration 类的规范进行配置,例如该应用程序将收到 blog.burakkayacan.com ?我最新的解决方案将是战争文件,但春季文档和网络研讨会建议制作 jar 文件进行部署。 正如我所提到的,嵌入式 tomcat 用于 1 app 1 tomcat 实例方法。如果您使用的是共享 Tomcat 实例,则必须构建 WAR 而不是胖 JAR。【参考方案2】:

这取决于。 2 种方法来部署你的 project.jar

第一种方式:您可以使用“apache web 服务器”和他自己的“mod_proxy”,以便为您想要的任意数量的 Spring webapps 提供服务,每个应用程序都在配置有“php-”的特定端口上fpm”并定义了一个代理来路由来自/到基于名称的 VirtualHost 配置的请求。

如今,使用 Spring Boot 2.5,您所要做的就是在您的 application.properties 文件中设置属性 server.port,并与 mod_proxy 指令相应地使用它。 如果您使用配置文件,您可以将一个端口设置为devprodtest 或任何您需要的属性文件。

另一种方法:您也可以使用 apache Web 服务器“mod_jk”桥接模块为您的虚拟主机配置多个负载平衡器。

选择你的道路,年轻的绝地;)

这个回应当然不是针对 7 年后的 OP,而是针对其他使用任何网络搜索引擎(如 Google)的人。他们会来到这里,看到“有些事情是不可能的”。这不是真的。

【讨论】:

以上是关于如何为 Spring Boot 应用程序配置嵌入式 Tomcat 虚拟主机?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Spring Boot 应用程序配置端口

如何为 Spring Boot 应用程序的 gradle 构建设置活动配置文件?

如何为具有 Spring Security 配置的 Spring Boot API 编写单元测试

如何为非Spring Boot的Java应用程序指定外部配置文件

如何为批量插入配置spring boot和data jpa

如何为JSP配置spring boot mvc app?