У нас есть сервер Debian X64, на котором сейчас есть экземпляр tomcat, где у нас есть 3 webapps
в WAR
файл конечно. Кроме того, у нас есть веб-сервер Apache, на котором работает одна система CMS. И последний проект - это Maintenance
webapp, который отображается, когда мы работаем на сервере и сервис недоступен.
Перед нами стоят следующие проблемы:
Что я пытаюсь делать в долгосрочной перспективе:
www.xyz.com
, тогда он должен вызвать XYZ
webapp, который у нас есть. Одно и то же имя веб-приложения и доменное имя являются случайными.Maintenance
webapp для всей сетки, которая будет вызываться, когда какой-либо домен неактивен, не отвечает или занят.Я создал картинку (ужасную .. :-(), которая более наглядно объясняет задачу.
Как вы теперь видите, архитектура, вот мои вопросы.
Обратите внимание, что у нас есть доменные имена, зарегистрированные в DNS для всех веб-приложений и веб-сайтов на основе веб-серверов.
Надеюсь, я добавил достаточно информации, если что-то требуется, пожалуйста, дайте мне знать. Любая помощь будет приятной. Большое спасибо. :-)
Учитывая, что у вас только один 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.
С этим у вас решены 3 проблемы.
Это касается и вашего первого долгосрочного плана, а также второго:
Свяжите веб-приложение обслуживания со всей сеткой, которая будет вызываться, когда какой-либо домен неактивен, не отвечает или занят.
Сделать это можно разными способами. Например, с помощью настраиваемой страницы ошибок на Apache для ошибок 500/503, которая перенаправляет на ваш maintenace.example.com. Это может быть вопрос сам по себе
Что касается ваших последних вопросов:
1 Это хороший подход? Если нет, скажите, пожалуйста, где и что я могу сделать лучше.
Думаю, я тоже это рассказал
2 Задача, которую я пытаюсь выполнить, как она называется? Grid-config, балансировка нагрузки?
Виртуальный хостинг (с возможной балансировкой нагрузки, см. Позже)
3 Как связать все веб-приложения, веб-сайты вместе, на которые можно ссылаться по разным URL-адресам, но которые будут указывать на правильное веб-приложение или веб-сайт.
Об этом заботятся виртуальные хосты Apache и прокси. Вы даже можете переписать, чтобы вам не приходилось использовать контекстный путь в URL-адресе. Это тоже может быть самостоятельным вопросом.
4 Я хорошо разбираюсь в Apache tomcat и администрировании Linux, но не в основном в веб-сервере Apache. Может ли кто-нибудь помочь мне в решении этой проблемы, в планировании и в том, что мне потребуется, чтобы я мог ее выполнить.
Думаю, я тоже это осветил.
Кстати, я бы использовал как минимум двух котов, но лучше, двух котов на приложение. По крайней мере, два, чтобы вы были защищены на случай, если кот умрет. По два на приложение, поэтому вы можете изолировать свои приложения друг от друга (работать в разных JVM). Это очень удобно, чтобы указать на конкретное приложение в случае возникновения проблем.
Надеюсь это поможет.
Я наконец-то смог решить эту проблему, изменив ее на следующую конфигурацию:
Tomcat 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>
worker.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, теперь он работает.