Размещение нескольких доменов в одной папке веб-приложения в Tomcat - PullRequest
0 голосов
/ 23 января 2019

Возможно дублирование этого , но ответ не принят.

У меня есть 2 сценария

  1. Мы создаем CRM, и у нас будет несколько клиентовиспользуя тот же продукт.Давайте возьмем пример, subdomain1.maindomain1.com и anysubmain.anothermaindomain.com должны указывать на одну и ту же папку веб-приложения.И в зависимости от домена, мы будем выбирать базу данных динамически, но кодовая база останется прежней. Укажите здесь: вся кодовая база остается неизменной .
  2. Мы создаем серию веб-сайтов для клиентов, где часть кодовой базы будет оставаться одинаковой для всех, но в зависимости отподдомен мы загрузим файл сервлета по умолчанию.Например, manage.domain.com crm.domain.com equote.domain.com должен указывать на одну и ту же папку веб-приложения.И в зависимости от домена мы будем загружать файл сервлета по умолчанию. Обратите внимание: часть кодовой базы останется одинаковой для всех доменов.Ex.файлы основного архитектора .

Какие другие решения предложили

  1. Развертывание копии одного и того же военного файла 2 раза, Softlink, Создать 2 контекстакоторые указывают на тот же файл, используйте псевдоним .Последний может быть хорошим вариантом, но не знаю, как мы можем использовать это для разных поддоменов / доменов.
  2. Это может быть одним из решений, но не уверен, будет ли он работать на том же порту или на другом порту
  3. В Интернете есть много статей, в которых показано, как мы можем развернуть несколько веб-приложений в нескольких доменах на одном сервере tomcat, но не так, как мне нужно.

Примечание. Я могу создать2 экземпляра AWS EC2 для вышеуказанных 2 сценариев.Это означает, что я не ожидаю одного решения выше 2 проблем.

1 Ответ

0 голосов
/ 25 января 2019

В 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.xml, каждый из которых указывает на одну и ту же кодовую базу (например, файл .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 для anysubmain_anothermaindomain_com_dbname в $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>

Таким образомвсе веб-приложения домена основаны на одной и той же docBase, но могут иметь разные (варианты) jar-файлов или другие зависимости от ресурсов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...