Веб-сервер Apache и Tomcat: одновременное выполнение нескольких веб-приложений tomcat и веб-сервера apache

У нас есть сервер Debian X64, на котором в настоящее время есть экземпляр tomcat, где у нас есть 3 веб-приложения в файле WAR , конечно. Кроме того, у нас есть веб-сервер Apache, на котором работает одна система CMS. И последний проект - это веб-приложение Maintenance , которое отображается, когда мы работаем на сервере, а служба недоступна.

Проблемы, с которыми мы сталкиваемся:

  1. Только один из веб-серверов Tomcat или Apache постоянно работает на порту 80.
  2. Для приложений Tomcat доступ к приложениям должен осуществляться по разным контекстным путям.
  3. Мы не можем запускать все под несколькими доменными именами, но на одном сервере.

Что я пытаюсь сделать в долгосрочной перспективе:

  1. Использовать Tomcat (предпочтительно) или веб-сервер Apache в качестве балансировщика нагрузки, который будет ретранслировать запросы на основе доменных имен. Итак, если кто-то звонит по url www.xyz.com , то он должен вызвать веб-приложение XYZ , которое у нас есть. Одно и то же имя веб-приложения и доменное имя являются чисто случайными.
  2. Свяжите Обслуживание веб-приложение со всей сеткой, которая будет вызываться, когда какой-либо домен неактивен, не отвечает или занят.

Я создал картинку (ужасную .. :-(), что более наглядно объясняет задачу.

enter image description here

Как вы теперь видите архитектуру, вот мои вопросы.

  1. Это хороший подход? Если нет, скажите, пожалуйста, где и что я могу сделать лучше.
  2. Задача, которую я пытаюсь выполнить, как она называется? Grid-config, балансировка нагрузки?
  3. Как связать вместе все веб-приложения, веб-сайты, на которые можно ссылаться по разным URL-адресам, но которые будут указывать на правильное веб-приложение или веб-сайт.
  4. Я хорошо разбираюсь в Apache tomcat и Администрирование Linux, а не веб-сервера Apache. Может ли кто-нибудь помочь мне в решении этой проблемы, в планировании и в том, что мне потребуется, чтобы я мог ее выполнить.

Обратите внимание, у нас есть доменные имена, зарегистрированные в DNS для всех веб-приложений и веб-сайтов на основе веб-серверов.

Я надеюсь, что добавил достаточно информации, если что-то требуется, любезно дайте мне знать. Любая помощь была бы хороша. Большое спасибо. : -)

3
задан 8 December 2015 в 10:24
2 ответа

Наконец-то я смог решить эту проблему, изменив ее на следующую конфигурацию :

Tomcat's server.xml :

 <Connector port="8080" proxyPort="80" redirectPort="443" protocol="HTTP/1.1" compression="force" compressionMinSize="1024" 
               connectionTimeout="20000"  maxPostSize="5242880"
               URIEncoding="utf-8"
 compressableMimeType="text/html,text/xml,text/plain,text/css,text/ javascript,application/x-javascript,application/javascript"/>


 <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"  maxPostSize="5242880" SSLEnabled="true" maxThreads="200" compr$
              compressionMinSize="1024" scheme="https" secure="true" clientAuth="false"  sslProtocol="TLS"
               keystoreFile="keystore.jks" keystorePass="PASSWORD" URIEncoding="utf-8"
 compressableMimeType="text/html,text/xml,text/plain,text/css,text/ javascript,application/x-javascript,application/javascript"/>

  <Connector port="8010" protocol="AJP/1.3" redirectPort="80" URIEncoding="utf-8"
 compressableMimeType="text/html,text/xml,text/plain,text/css,text/ javascript,application/x-javascript,application/javascript"
/>
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat">
   // Multiple webapps hosted
    </Engine>

Добавлено в jk.conf :

<IfModule jk_module>
        JkWorkersFile   /PATH/to/workers.properties
        JkLogFile       /var/log/apache2/mod_jk.log
        JkLogLevel      notice
        JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
        JkOptions       +ForwardURIProxy
        JkMountFile     /path/to/uriworkermap.properties
</IfModule>

workers.properties :

 worker.list = worker_app1
worker.worker_app1.type = lb
worker.worker_app1.balance_workers = app1_instance1
worker.worker_app1.sticky_session = true
worker.worker_app1.sticky_session_force = false
worker.worker_app1.method = busyness

worker.app1_instance1.type = ajp13
worker.app1_instance1.host = 127.0.0.1
worker.app1_instance1.port = 8010
worker.app1_instance1.host = localhost
worker.app1_instance1.lbfactor = 1
worker.app1_instance1.socket_timeout = 40
worker.app1_instance1.socket_keepalive = true
worker.app1_instance1.reply_timeout = 30000

uriworkermap.properties :

/|/* = worker_app1;

Добавлено в 000-default в sites-enabled

// This is the tomcat domain. 
<VirtualHost *:80>
ServerName www.domain_tomcat_webapp.de
ServerAlias domain_tomcat_webapp.de
ProxyRequests on
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>

ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/

<Location / >
Order allow,deny
Allow from all
</Location>
</VirtualHost>

И все. Затем я запустил tomcat и перезапустил веб-сервер Apache, теперь он работает.

2
ответ дан 3 December 2019 в 05:41

Учитывая, что у вас есть только один IP-адрес и один сервер, я бы:

Поместил один экземпляр прослушивания apache на порт 80 с виртуальным хостингом на основе имени (так как у вас есть только один IP-адрес, остерегайтесь возможные проблемы с SSL, если вы планируете использовать HTTPS, проверьте здесь: https://wiki.apache.org/httpd/NameBasedSSLVHosts )

Таким образом, у вас будет виртуальный хост для каждого поддомена, скажем ваш домен - example.com, у вас будет:

www.app1.com
[...]
www.appN.com

cms.example.com
maintenance.example.com

На виртуальном хосте, который управляет поддоменами приложений, вы можете настроить обратный прокси-сервер с помощью mod_jk, mod_proxy_ajp или mod_proxy_http по вашему желанию. Я бы выбрал mod_jk для tomcat.

Этим вы решите три проблемы.

Это также касается вашего первого долгосрочного плана, а также второго:

Свяжите веб-приложение обслуживания со всей сеткой, которая будет вызываться, когда какой-либо домен неактивен, не отвечает или занят.

Это можно сделать различными способами. Например, с помощью настраиваемой страницы ошибок на Apache для ошибок 500/503, которая перенаправляет на ваш maintenace.example.com. Это может быть самостоятельный вопрос

Что касается ваших последних вопросов:

1 Это хороший подход? Если нет, скажите, пожалуйста, где и что я могу сделать лучше.

Думаю, я тоже справился

2 Задача, которую я пытаюсь выполнить, как это называется? Grid-config, балансировка нагрузки?

Виртуальный хостинг (с возможной балансировкой нагрузки, см. Позже)

3 Как связать вместе все веб-приложения, веб-сайты, на которые можно ссылаться через разные URL-адреса, но которые будут указывать на правильное веб-приложение или веб-сайт.

Об этом заботятся виртуальные хосты Apache и прокси. Вы даже можете переписать, чтобы вам не приходилось использовать контекстный путь в URL-адресе. Это тоже может быть вопрос самого себя.

4 Я хорошо разбираюсь в Apache tomcat и администрировании Linux, не столько в веб-сервере Apache. Может ли кто-нибудь помочь мне в решении этой проблемы, в планировании и в том, что мне потребуется, чтобы я мог ее выполнить.

Думаю, я тоже это рассмотрел.

Замечание: я бы использовал как минимум двух котов, но лучше, двух котов на приложение. По крайней мере, два, чтобы вы были защищены на случай, если кот умрет. По два на приложение, поэтому вы можете изолировать свои приложения друг от друга (работать в разных JVM). Это очень удобно, чтобы указать на конкретное приложение в случае проблем и т. Д.

Надеюсь, это поможет.

3
ответ дан 3 December 2019 в 05:41

Теги

Похожие вопросы