亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 tomcat 的單個 webapp 文件夾上托管多個域

在 tomcat 的單個 webapp 文件夾上托管多個域

郎朗坤 2022-05-21 13:34:47
可能與此重復,但不接受答案。我有2個場景我們正在構建一個 CRM,我們將有多個客戶使用相同的產品。舉個例子,subdomain1.maindomain1.com應該anysubmain.anothermaindomain.com指向同一個 webapp 文件夾。并且根據域,我們將動態選擇數據庫,但代碼庫將保持不變。這里要注意:整個代碼庫保持不變。我們正在為客戶構建一系列網站,其中部分代碼庫將保持不變,但取決于子域,我們將加載默認的 servlet 文件。舉個例子,manage.domain.com crm.domain.com equote.domain.com應該指向同一個 webapp 文件夾。根據域,我們將加載默認的 servlet 文件。此處需要注意:部分代碼庫對于所有域都將保持不變。前任。核心架構師文件。其他人建議了什么解決方案部署同一個war文件的副本2次,軟鏈接,創建2個指向同一個文件的上下文,使用別名。最后一個可能是不錯的選擇,但不知道我們如何將它用于不同的子域/域。這可能是解決方案之一,但不確定它是否適用于相同端口或不同端口互聯網上有很多文章展示了我們如何在單個 tomcat 服務器上的多個域上部署多個 webapp,但不是我需要的方式。注意:我可以為以上 2 個場景創建 2 個 AWS EC2 實例。這意味著我不期待上述 2 個問題的解決方案。
查看完整描述

1 回答

?
桃花長相依

TA貢獻1860條經驗 獲得超8個贊

在 Apache Tomcat 中,您可以配置多個虛擬主機,每個虛擬主機部署相同的 .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.xmleach 指向相同的代碼庫(例如 .war 文件)但不同的數據庫配置。通常,這為每個域提供了不同的上下文配置。


$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,您可以為每個域配置不同的外部資源文件夾。


EG for anysubmain_anothermaindomain_com_dbnamein$CATALINA_HOME/conf/Catalina/anysubmain.anothermaindomain.com/ROOT.xml


<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 文件或其他資源依賴項。


查看完整回答
反對 回復 2022-05-21
  • 1 回答
  • 0 關注
  • 122 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號