Назад | Перейти на главную страницу

Apache + Tomcat: какой из них должен обрабатывать SSL? Перенаправление прокси на основе IP?

В настоящее время у нас есть приложение Tomcat, работающее с SSL на порту 443. Прямо сейчас у нас есть сервер apache, который принимает HTTP-запросы на порт 80 и перенаправляет на экземпляр Tomcat:

<VirtualHost *:80>
    ServerName domain.com
    ServerAlias domain.com
    <LocationMatch "/">
        Redirect permanent / https://domain.com/
    </LocationMatch>
</VirtualHost>

Tomcat обрабатывает SSL, потому что прокси-сервера нет, просто перенаправление на порт SSL:

    <Connector 
          port="443" maxThreads="200"
          scheme="https" secure="true" SSLEnabled="true"
          keystoreFile="/app/ssl/domain_com.jks" keystorePass="ourpassword"
          clientAuth="false" sslProtocol="TLS"/>

Мы хотим начать использовать веб-сервер apache в качестве прокси-сервера и, кроме того, выполнять перенаправления по IP-адресу для определенных приложений, которые должны использоваться только хостами в заранее определенном диапазоне IP-адресов. Мы также хотели бы перенаправить IP-адреса, которые не соответствуют заранее определенному списку, на статическую html-страницу, размещенную на сервере Apache.

Мой первый вопрос: следует ли мне продолжать обрабатывать SSL на стороне Tomcat или мне следует использовать apache с SSL при перенаправлении на «незащищенный» порт Tomcat?

Есть ли способ перенаправить на разные приложения (и, возможно, на хосты) в зависимости от входящего IP-адреса?

спасибо дель

Что касается обработки SSL, это типичный вариант использования разгрузки SSL. Поскольку вы, скорее всего, собираетесь использовать один сертификат SSL (сертификат для вашего доменного имени), у вас будет один apache и n Tomcats. Таким образом, apache - лучшее место для обработки SSL. Тогда обмен данными между Apache и Tomcat должен осуществляться через AJP, а НЕ через http или https.

Я написал пошаговую инструкцию по разгрузке SSL, может быть вам полезно. И ссылка на него: http://milestonenext.blogspot.de/2012/09/ssl-offloading-with-modjk-part-1.html

Это возможно. Я предпочитаю использовать Apache в качестве внешнего интерфейса для всех внутренних веб-серверов, включая несколько версий Tomcat (позволяющих упростить обновление для каждого клиента), IIS и некоторых устройств.

Разгрузка SSL описана в http://www.invantive.com/about-invantive/news/entryid/897/ssl-offloading-for-apache-tomcat.

По вопросу 2 (выборочное перенаправление):

мы обычно используем два подхода:

  • Все аналогичные экземпляры приложения доступны по одному URL-адресу с помощью виртуального хоста. Например, app1.invantive.com или that-other-app.invantive.com.
  • Каждая группа пользователей получает свой URL-адрес внутри этого виртуального хоста, а также некоторую форму разделения DTAP. Например, app1.invantive.com/acme-corporation/production, app1.invantive.com/acme-northpole-corporation/test.

Если вы используете Apache только для маршрутизации трафика, вам вряд ли когда-либо понадобится его заменять. Таким образом, он становится надежным компонентом, который упрощает перенос приложений и сайтов в новые места, и вам просто нужно перенаправить правила маршрутизации Apache. У вас больше нет изменений DNS и проблем с TTL.

Мы всегда используем Apache (или Nginx) для проксирования и «разгрузки SSL», как некоторые это называют. Делаем это годами в различных производственных системах с разными требованиями. Apache предоставляет вам большую гибкость и множество функций, которые вы можете использовать, чтобы вы могли сохранить конфигурацию сервера приложений как можно более простой, тонкой и легкой для понимания. Я также рекомендовал бы использовать mod_jk (т.е. AJP) для связи между Apache и Tomcat. Tomcat по умолчанию прослушивает запросы AJP на порту 8009.

Что касается ваших вопросов по перенаправлению: это можно легко сделать, используя комбинацию mod_rewrite, mod_jk и, возможно, несколько Location/LocationMatch директивы в вашей конфигурации Apache. Зависит от того, что именно вы хотите делать. Нужны подробности, а лучше отдельный вопрос.

Я действительно не так хорошо знаком с приложениями или архитектурой tomcat (в своей организации я использую только несколько), поэтому могут быть другие способы реализации крупномасштабных программ; однако SSL может обрабатываться Tomcat, Apache или выгружаться на балансировщик нагрузки, а другие вещи, о которых вы упомянули, можно легко обрабатывать с помощью mod_rewrite.

Есть несколько модулей Apache, которые делают именно это (с множеством практических рекомендаций и руководств в сети). Проверьте mod_proxy, mod_proxy_ajp или, возможно, mod_jk. Вы захотите провести небольшое исследование, чтобы найти наиболее подходящий для вас вариант.

Надеюсь, это будет хорошей отправной точкой для исследования.

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