Статьи

Запуск Tomcat позади Apache с mod_rewrite и mod_proxy

В этой статье мы расскажем о том, как создать сервер приложений Tomcat с помощью Apache .

Tomcat — это безопасный, быстрый и полнофункциональный сервер. Он способен надежно обслуживать огромный объем данных. Вот почему он вполне сопоставим по производительности с нативными веб-серверами.

Это поднимает вопрос: зачем нам нужно размещать Tomcat за сервером Apache ? Такое решение широко используется для повышения производительности сред с высокой нагрузкой. Будучи быстрым, безопасным и гибким сервером HTTP и имеющим множество модулей, Apache легко предоставляет некоторые дополнительные функции для различных целей.

Вот лишь несколько причин использовать сервер приложений Tomcat за Apache:

  • Высокая доступность благодаря балансировке нагрузки между несколькими серверами приложений Tomcat.

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

  • Дополнительные проблемы безопасности могут быть легко настроены в Apache и использованы для защиты вашего приложения, расположенного на сервере Tomcat.

  • Дополнительные функции могут быть добавлены с помощью широкого спектра модулей Apache.

Существуют разные способы соединения Apache и Tomcat. Самый популярный метод — установить это соединение, используя mod_proxy или mod_rewrite, которые довольно просты в настройках. С этими базовыми конфигурациями Apache начинает передавать запросы к вашему внутреннему серверу Tomcat и после этого передает ответы обратно клиенту.

Ниже мы покажем вам три широко используемых случая использования mod_rewrite и mod_proxy для запуска сервера Tomcat за Apache в облаке Jelastic:

Переписывание ссылок

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

В качестве примера мы развернули простые приложения, которые показывают IP-адреса серверов, чтобы легко их дифференцировать.

первое приложение кота

второе приложение кота

Используя Apache с mod_rewrite, вы можете иметь оба ваших приложения доступными на одном порту только по разным путям. Например:

Это позволяет перезапускать, управлять и отлаживать каждое приложение отдельно. В то же время ваши конечные пользователи будут рассматривать их как одно приложение.

Давайте посмотрим, как установить это в Jelastic :

1. Вам необходимо иметь три (или более) окружения следующего типа:

  • две (или более) серверные среды Tomcat с развернутыми приложениями Java
  • одна интерфейсная среда Apache

envs для переписывания

2. Нажмите Config для вашего сервера приложений Apache.

3. Перейдите в папку conf и откройте файл httpd.conf .

Выполните следующие настройки в  блоке <VirtualHost> и перезапустите сервер Apache:

<VirtualHost *:80>
   ServerAdmin [email protected]
   DocumentRoot /var/www/webroot/ROOT
   ServerName website.jelastic.com
   ServerAlias *

   RewriteEngine On

   RewriteRule ^/application1/(.*) http://env-tomcat.jelastic.com/app1/ [P]
   ProxyPassReverse /application1/ http://env-tomcat.jelastic.com/app1/

   RewriteRule ^/application2/(.*) http://second-tomcat.jelastic.com/app2/ [P]
   ProxyPassReverse /application2/ http://second-tomcat.jelastic.com/app2/

   RewriteLog "/var/log/httpd/rewrite.log"

   ErrorLog logs/dummy-host.jelastic.com-error_log
   CustomLog logs/dummy-host.jelastic.com-access_log common
</VirtualHost>

apache httpd.conf

  • RewriteEngine On включает возможность перезаписи

  • RewriteRule и ProxyPassReverse определяют условия и результат перезаписи для обоих приложений

  • Опционально добавлен RewriteLog для хранения логов перезаписи в указанном месте

4. Чтобы проверить результат, нажмите Открыть в браузере для своей среды Apache и добавьте путь, который вы указали в RewriteRule, в качестве условия, чтобы открыть правильное приложение.

В нашем случае мы добавляем:

  • / Application1 /

переписать первое приложение

  • / Application2 /

переписать второе приложение

Как видите, два необходимых приложения открываются под одним и тем же портом, но по другому пути.

Такой подход может также использоваться для создания чистых и более описательных ссылок, поскольку пользователи и поисковые системы предпочитают получать полезную информацию о содержимом страницы из URL.

Обслуживание статического контента

Чтобы ваше приложение работало быстрее, вы можете распределять действия между серверами Tomcat и Apache. Позвольте вашему Tomcat выполнять основные функции, обслуживая приложение, и Apache будет отвечать за доставку статического контента. В результате ваше приложение сможет обслуживать больше одновременно работающих пользователей.

статический контент

Давайте посмотрим, как это можно настроить в Jelastic с помощью mod_proxy :

1. Вам необходимо иметь как минимум две среды:

  • один с сервером Tomcat для вашего приложения работает

  • один с сервером Apache для хранения статического контента

envs статического контента

2. Нажмите Config для вашего сервера приложений Apache.

3. Загрузите ваши статические файлы в папку webroot> ROOT .

Вы можете создать отдельную папку для статического содержимого (например, статического ), как показано на рисунке ниже, и загрузить в него свои файлы.

статический контент

4. Перейдите в папку conf и откройте файл httpd.conf .

Выполните следующие настройки в  блоке <VirtualHost> и перезапустите сервер Apache:

<VirtualHost *:80>
   ServerAdmin [email protected]  
   DocumentRoot /var/www/webroot/ROOT
   ServerName website.jelastic.com
   ServerAlias *

   ProxyPass        /static !

   ProxyPass        / http://env-tomcat.jelastic.com/app1/
   ProxyPassReverse / http://env-tomcat.jelastic.com/app1/

   ErrorLog logs/dummy-host.jelastic.com-error_log
   CustomLog logs/dummy-host.jelastic.com-access_log common
</VirtualHost>

настройки статического контента

ProxyPass / статический!  заявляет, что мы не выполняем прокси-запросы, начиная с ключевого слова / static / .

Остальные запросы будут перенаправлены на наше приложение, развернутое на Tomcat (путь к приложению определяется ProxyPass и ProxyPassReverse ).

5. Чтобы проверить результат, нажмите Открыть в браузере для своей среды Apache, и вы увидите, что ваше приложение проксируется с вашего сервера Tomcat.

проксированное приложение Tomcat

6. Укажите путь к статическому контенту в URL, и он также будет доступен.

статическая папка

статичное изображение

В результате и приложение, расположенное на Tomcat, и статический контент, хранящийся в Apache, доступны на одном и том же порту.

Балансировки нагрузки

Чтобы справиться с дополнительной нагрузкой или просто получить какое-либо переключение при сбое, вы можете добавить больше серверов приложений Tomcat. Кроме того, сервер Apache можно использовать для распределения нагрузки между этими серверами Tomcat.

балансировка нагрузки apache

Давайте настроим Apache для балансировки нагрузки в ваших Java-приложениях Jelastic с использованием mod_rewrite :

1. Для этой конфигурации мы будем использовать три среды:

  • развернуты две серверные среды Tomcat с приложениями Java

Обратите внимание, что вам нужно использовать один и тот же контекст для развертывания обоих приложений. Еще лучше создать одну среду и затем клонировать ее, чтобы иметь идентичные копии.

  • одна интерфейсная среда Apache

envs для балансировки нагрузки

2. Нажмите Config для вашего сервера Apache.

3. Перейдите в папку conf.d и создайте новый файл, например, server_list .

4. В созданный файл добавьте хосты ваших сред с развернутыми приложениями в следующем формате:

servers {env1_name}.{hoster_domain}|{env2_name}.{hoster_domain}

список серверов

5. Перейдите в папку conf и выполните следующие настройки в файле httpd.conf :

<VirtualHost *:80>
   ServerAdmin [email protected]
   DocumentRoot /var/www/webroot/ROOT
   ServerName website.jelastic.com
   ServerAlias *
   RewriteEngine On
   RewriteMap lb rnd:/etc/httpd/conf.d/servers.list
   RewriteRule ^/(.*) http://${lb:servers}/app1/$1 [P,L]
   RewriteLog "/var/log/httpd/rewrite.log"
   ErrorLog logs/dummy-host.jelastic.com-error_log
   CustomLog logs/dummy-host.jelastic.com-access_log common
</VirtualHost>

настройки балансировки нагрузки

  • RewriteEngine On включает возможность перезаписи

  • RewriteMap указывает путь к хостам, указанным в ранее созданном файле.

  • RewriteRule указывает условия балансировки нагрузки

  • Опционально добавлен RewriteLog для хранения логов перезаписи в указанном месте

6. Перезагрузите сервер Apache.

7. Чтобы увидеть результат, нажмите Открыть в браузере для вашего приложения Apache.

Вы увидите, что одно из ваших приложений развернуто на Tomcat.

Обновите страницу (один или несколько раз), и в результате распределения нагрузки откроется ваше второе приложение.

 первое приложение

второе приложение

Это лишь некоторые основные случаи использования Apache в качестве внешнего интерфейса вашего сервера Tomcat. Вы можете получить еще больше преимуществ от объединения Apache с Tomcat. Мы надеемся, что эти инструкции помогут вам сделать ваше приложение еще более эффективным, гибким и стабильным. Сообщите нам о своем опыте работы с Tomcat с сервером Apache в комментариях ниже.