Статьи

Виртуальный хост + сервер Apache httpd + Tomcat + разъем mod_jk

В моем последнем посте ( Виртуальный хост в Tomcat ) мы обсуждали, как настроить виртуальный хост в Tomcat. Это экономически эффективный метод, потому что для размещения нескольких доменов достаточно одного публичного IP. Если у нас большая организация, и каждый отдел хочет разместить свой сайт локально на другой машине. тогда как реализовать концепцию виртуального хоста? В этом посте мы увидим, как мы это делаем.

Сценарий проблемы: в большой организации у них есть несколько отделов, каждый из которых хочет разместить свой сайт на другой машине. таким образом, эти сайты доступны локально с другим локальным IP-адресом.

Когда мы сопоставляем публичное выступление, тогда мы сталкиваемся с проблемой. У нас есть два варианта: либо купить как можно больше публичных адресов, либо поставить один сервер на фронт и передать этот запрос.

Мы собираемся использовать 2-й вариант. мы помещаем веб-сервер Apache httpd перед всеми серверами отдела. так что достаточно только одного публичного IP. Все DNS-записи домена направлены на httpd-сервер Apache. Затем сервер Apache передает эти запросы соответствующему серверу Tomcat. Этот процесс полностью прозрачен с точки зрения пользователя (браузера).

Структура структуры реализации виртуального хоста

Как веб-сервер Apache httpd взаимодействует с сервером Tomcat

Прежде чем мы подробно расскажем о том, как происходит связь между сервером httpd и tomcat

Сколько портов связывается, когда мы запускаем один кот?

  • порт отключения
  • порт разъема http
  • Порт разъема https (необязательно)
  • порт ajp

Конфигурация порта хранится в файле $ CATALINA_HOME / conf / server.xml. мы можем изменить порты, когда это необходимо.

Здесь AJP (Apache JServ Protocol) — это двоичный протокол, который может передавать входящие запросы с веб-сервера на сервер приложений, расположенный за веб-сервером.

Веб-сервер Apache httpd взаимодействует с сервером Tomcat по протоколу AJP.

Когда мы устанавливаем сервер Apache httpd, он не имеет встроенной возможности поддержки протокола ajp. поэтому нам нужен модуль mod_jk . Это добавляет поддержку ajp к серверу Apache httpd.

Шаги для реализации концепции виртуального хоста в этом сценарии:

  1. Установите веб-сервер Apache httpd
  2. Установите разъем mod_jk
  3. Настройте соединитель JK
  4. Настройте сервер Apache httpd, примените концепции виртуального хоста

Предварительное условие: мы уже установили Tomcat в разных отделах, развернули приложение и работаем нормально.

Установите веб-сервер Apache httpd

Мы можем установить веб-сервер Apache двумя способами:

  1. Бинарный модуль
  2. Из источника

Мы можем установить сервер Apache httpd из диспетчера пакетов распространения (apt-get или yum). Или мы можем скачать исходный код, а затем скомпилировать и установить.

Мы используем второй вариант. Сначала загрузите исходный код сервера httpd здесь . затем распакуйте его и установите

1
2
3
./configure --prefix=/usr/local/apache    --enable-rewrite=shared  --enable-proxy=shared
make
sudo make install

Здесь опция префикса, чтобы указать, куда мы собираемся установить сервер Apache httpd. Опции –enable-rewrite и –enable-proxy для включения этих модулей в режиме совместного использования. Эти модули сейчас не нужны. но в будущем мы использовали его для перезаписи URL перед передачей на следующую цепочку серверов и поддержкой балансировки нагрузки.

Установите разъем mod_jk

Теперь сервер Apache httpd готов. нам нужно добавить поддержку ajp на сервер. скачайте модуль коннектора mod_jk отсюда , распакуйте его и установите

1
2
3
4
5
cd native
./configure    --with-apxs=/usr/local/apache/bin/apxs
 
make
sudo make install

Здесь опция –with-apxs указывает, где находится модуль apxs. поэтому нам нужно указать расположение сервера Apache httpd. Теперь файлы mod_jk.so создаются в каталоге модулей в установленном apache-каталоге (/ usr / local / apache / modules)

Настроить соединитель mod_jk

Этот шаг имеет 2 подэтапа:

  1. Создать файл worker.properties
  2. Загрузите и настройте модуль коннектора JK в файле apache httpd.conf.

Создать файл worker.properties

Разъем mod_jk готов. но этот разъем работает на основе файла конфигурации. поэтому нам нужно создать файл конфигурации с именем worker.properties file

Этот синтаксис файла — пара ключ = значение, здесь мы определяем рабочих. т. е. все tomcat отдела размещают IP-адрес и порт ajp для соответствующего tomcat.

Здесь формат записи выглядит так:

1
worker.<name>.property=<value>

Например:

1
2
3
4
worker.<name>.type=ajp13
worker.<name>.port=<ajp port>
worker.<name>.host=<tomcat ip addr>
worker.list=<name>

Вот:

  • Ключ worker.list содержит имя всех работников, разделенных запятой
  • type = здесь тип работника. мы используем версию ajp13
  • port = мы указываем порт ajp (не порт http) этого сервера
  • host = IP-адрес или имя хоста сервера Tomcat

workers.properties

01
02
03
04
05
06
07
08
09
10
11
12
13
worker.list=department1,department2,department3
 
worker.department1.type=ajp13
worker.department1.port=5000
worker.department1.host=192.168.5.10
 
worker.department2.type=ajp13
worker.department2.port=5000
worker.department2.host=192.168.6.10
 
worker.department3.type=ajp13
worker.department3.port=5000
worker.department3.host=192.168.7.10

Добавить запись в httpd.conf

Apache httpd сервер установлен. Модуль mod_jk установлен и создан файл works.properties. но эти 3 изолированы. мы собрали вместе, нам нужно настроить сервер httpd.

Найдите файл conf / httpd.conf в установленном Apache-каталоге и добавьте в него следующие записи

1
2
3
4
5
6
7
8
9
LoadModule    jk_module  modules/mod_jk.so
 
JkWorkersFile conf/workers.properties
 
JkLogFile     logs/mod_jk.log
JkLogLevel    emerg
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkOptions     +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat     "%w %V %T"

Вот:

  • LoadModule — загрузить общий модуль mod_jk на httpd-сервер Apache (включить модуль mod_jk)
  • JkWorkersFile — Укажите расположение файла worker.properties
  • Все остальные являются системой регистрации mod_jk. Его стандартный код просто скопируйте и вставьте.

Делегировать httpd в Tomcat

Теперь мы сообщаем серверу Apache httpd, как делегировать запрос соответствующему серверу.

1
2
3
JkMount  /department1* department1
JkMount  /department2* department2
JkMount  /department3* department3

Вот:

  • JkMount — укажите, если URL-адрес имеет шаблон / отдела1 *, тогда этот запрос делегировать в отдел1
  • работник. этот рабочий IP-адрес и порт указаны в файле worker.properties.

Мы изменили файл / etc / hosts, как и в последнем сообщении, весь домен веб-сайта указывал на веб-сервер apache httpd.

Если мы перейдем по адресу http://www.ramki.com/department1/index.html, как сервер Apache httpd обрабатывает запрос

Его прекрасно называют правильным сервером Tomcat, и мы получили правильный ответ.

Но у нас есть 2 проблемы
1. Я не хочу, чтобы мой URL-адрес был таким http://www.ramki.com/department1/index.html
Я хочу, чтобы мой URL-адрес, как это http://www.ramki.com/index.html

Удалить отдела1 из моего URL. но строка Department1 очень важна в URL, потому что JkMount работает только на основе этой подходящей строки.

2. http://www.ramki.com/department1/index.html предназначен для первого кота, а у второго отдела есть домен http://www.krishnan.com, а затем для доступа ко второму коту мы используем URL: http: //www.krishnan .com / Department2 / index.html, но когда мы используем URL http://www.krishnan.com/department1/index.html, мы получаем доступ к первым данным tomcat
(то есть)
http://www.ramki.com/department1/index.html == http://www.krishnan.com/department1/index.html, поскольку оба эти URL-адреса имеют ключевое слово Department1 … поэтому JkMount работает на основе этих ключевых слов , В результате неверная интерпретация. Как решить эту проблему?

Виртуальный хост на сервере Apache httpd

Нам нужно добавить условный JkMount. например, домен ramki.com запрашивает пути whereare, такие как Department1, Department2, которые мы должны искать только в этом коте. не другое место. чтобы добавить это обусловлено мы добавляем записи виртуального хоста.

Добавить запись виртуального хоста в файл httpd.conf

01
02
03
04
05
06
07
08
09
10
11
12
Listen 80
NameVirtualHost *:80
 
<VirtualHost *:80>
    ServerName www.ramki.com
    JkMount  /department1* department1
</VirtualHost>
 
<VirtualHost *:80>
    ServerName www.krishnan.com
    JkMount  /department2* department1
</VirtualHost>

Вот
ServerName — доменное имя сервера

Если http://www.krishnan.com/department1/index.html URL сейчас такой. сервер соответствует имени сервера. здесь его соответствует 2-й записи виртуального хоста. Есть одна запись JkMount есть во втором виртуальном хосте. и там нет соответствующей строки Department1.

1
JkMount  /department2* department1

В результате откроется страница ошибки 404. Работает хорошо.

Теперь все работает нормально. Теперь мой URL http://www.ramki.com/department1/index.html здесь, я не хочу, чтобы путь отдела 1 в моем URL. Я хочу просто http://www.ramki.com/index.html тогда мы используем механизм mod_rewrite

01
02
03
04
05
06
07
08
09
10
Listen 80
NameVirtualHost *:80
 
<VirtualHost *:80>
     ServerName www.ramki.com
     RewriteEngine on
     RewriteLog logs/apache-mod_rewrite
     RewriteRule ^/(.*)$ /department1/$1 [L,PT]
     JkMount  /* <dept_name>
</VirtualHost>

Вот:

  • RewriteEngine on — включить модуль перезаписи
  • RewriteRule ^ / (. *) $ / Department1 / $ 1 [L, PT] — здесь ^ / (. *) $ Соответствует любой строке, в которой записано значение $ 1, и измените URL-адрес на / отдела1 / $ 1.

т.е.

http://www.ramki.com/index.html здесь ^ / (. *) $ его совпадения index.html захватывает до $ 1 и заменяет на / отдела1 / $ 1 ==> /department1/index.html

Перезапись происходит перед передачей запроса Tomcat. поэтому мы прозрачно меняем URL для браузера. Теперь клиенту (браузеру) достаточно просто отправить http://www.ramki.com для доступа к Отделу 1 Tomcat.

Sreen Cast

Справка: виртуальный хост + сервер Apache httpd + коннектор Tomcat + mod_jk от нашего партнера по JCG Рамы Кришнана в блоге