gpt4 book ai didi

java - 在 tomcat 中的单个 webapp 文件夹上托管多个域

转载 作者:搜寻专家 更新时间:2023-10-30 21:29:41 24 4
gpt4 key购买 nike

this 可能重复但答案不被接受。

我有两种情况

  1. 我们正在构建 CRM,我们将有多个客户使用相同的产品。让我们举个例子,subdomain1.maindomain1.comanysubmain.anothermaindomain.com 应该指向同一个 webapp 文件夹。根据域,我们将动态选择数据库,但代码库将保持不变。 此处要注意:整个代码库保持不变
  2. 我们正在为客户构建一系列网站,其中部分代码库将对所有网站保持不变,但根据子域,我们将加载默认的 servlet 文件。让我们举个例子,manage.domain.com crm.domain.com equote.domain.com 应该指向相同的 webapp 文件夹。根据域,我们将加载默认的 servlet 文件。 此处要注意:所有域的部分代码库将保持不变。前任。核心架构师文件

其他人建议的解决方案

  1. Deploy copy of same war file 2 time, Softlink, Create 2 contexts that point to the same file, Use alias .最后一个可能是个不错的选择,但不知道我们如何将其用于不同的子域/域。
  2. This can be one of the solution but not sure whether it will work on same port or different port
  3. 互联网上有很多文章展示了我们如何在单个 tomcat 服务器上的多个域上部署多个 Web 应用程序,但不是我需要的方式。

注意:我可以为以上 2 个场景创建 2 个 AWS EC2 实例。这意味着我不期待以上 2 个问题的解决方案。

最佳答案

在 Apache Tomcat 中,您可以 configure multiple virtual hosts每个部署相同的 .war 文件(或文档库),但具有不同的上下文配置参数,如 JDBC 连接、资源、外部 JAR 文件等。

为了坚持您的场景 (1),在 server.xml 中配置两个域的主机元素:

<Engine name="Catalina" defaultHost="subdomain1.maindomain1.com">
<Host name="subdomain1.maindomain1.com" appBase="subdomain1.maindomain1.com"/>
<Host name="anysubmain.anothermaindomain.com" appBase="anysubmain.anothermaindomain.com"/>
</Engine>

并为两者创建资源和配置文件夹:

mkdir $CATALINA_HOME/subdomain1.maindomain1.com
mkdir $CATALINA_HOME/anysubmain.anothermaindomain.com
mkdir $CATALINA_HOME/conf/Catalina/subdomain1.maindomain1.com
mkdir $CATALINA_HOME/conf/Catalina/anysubmain.anothermaindomain.com

然后为每个主机创建一个ROOT.xml,每个都指向相同的代码库(例如.war 文件)但不同data bases configuration .一般来说,这提供了一个不同的 context configuration对于每个域。

$CATALINA_HOME/conf/Catalina/subdomain1.maindomain1.com/ROOT.xml

<Context docBase="/path/to/your/webapp.war" path="">
<Resource name="jdbc/Database" auth="Container" type="javax.sql.DataSource"
username="subdomain1_maindomain1_com" password="anysecurepassword" driverClassName="com.your.jdbc.Driver"
url="jdbc:xyz://localhost:321/subdomain1_maindomain1_com_dbname"/>
...
</Context>

$CATALINA_HOME/conf/Catalina/anysubmain.anothermaindomain.com/ROOT.xml

<Context docBase="/path/to/your/webapp.war" path="">
<Resource name="jdbc/Database" auth="Container" type="javax.sql.DataSource"
username="anysubmain_anothermaindomain_com" password="anysecurepassword" driverClassName="com.your.jdbc.Driver"
url="jdbc:xyz://localhost:321/anysubmain_anothermaindomain_com_dbname"/>
...
</Context>

此外,为了实现方案 2,对于每个域,您可以 configure different external resource folders .

例如对于 $CATALINA_HOME/conf/Catalina/anysubmain.anothermaindomain.com/ROOT.xml

中的 anysubmain_anothermaindomain_com_dbname
<Context>
...
<Resources>
<PreResources base="/path/to/anysubmain_anothermaindomain_com_dbname/jarfiles/"
className="org.apache.catalina.webresources.DirResourceSet" readOnly="true"
internalPath="/" webAppMount="/WEB-INF/lib" />
</Resources>
...
</Context>

这样,所有域的 Web 应用程序都基于相同的 docBase,但可以添加不同的(变体)jar 文件或其他资源依赖项。

关于java - 在 tomcat 中的单个 webapp 文件夹上托管多个域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54321572/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com