Apache HTTPD, mod_jk, Apache Tomcat, Linux


1. Начало.

Если Вы ставите Tomcat как-то так: (от рута) aptitude install tomcat6 tomcat6-admin tomcat6-examples,
то прежде чем двигаться дальше, вам возможно стоит обратить внимание на настройки URIEncoding в server.xml.

  
  

Здесь и далее: Томкат => Apache Tomcat, Апач => Apache HTTPD.

2. Вяжем.

Классическая схема работы Томката (Apache Tomcat) в продакшене, это связка его с Apache (Apache HTTP Server) через mod_jk. Так делают уже много-много лет и это проверенное на практики и рекомендованное многими решение.
Связка делается через протокол AJP (Apache JServ Protocol). Это специальный бинарный протокол для прокидки запросов от web-сервера в глубину к другим серверам (например Tomcat-у).

Зачем такое нужно?
1. Снижаем нагрузку с томката. Статику (картинки, html-ки и т.д.) пусть лучше отдает апач, а запросы к сервлетами и jsp-кам прокидываются томкату.

2. Возможна балансировка нагрузки. Например один апач – несколько томкатов.

Кстати, можно связывать апач не только с томкатом, а например с Jetty (через mod_proxy), и наоборот томкат прикручивать например к nginix. Мы здесь такие варианты не будем рассматривать.

Итак, допустим у вас убунта с апачем и томкатом. На других линуксовых дистрибутивах аналогично.
Ставим mod_jk: (от рута) aptitude install libapache2-mod-jk или скачаем и ставим отсюда : http://tomcat.apache.org/download-connectors.cgi

Из общего правила структуры линуксовой файловой структуры мы знаем, что настройки должны находиться в папке /etc/.
Легко видеть, что:
– настройки томката будут в папке /etc/tomcat6
– настройки mod_jk в /etc/libapache2-mod-jk
– настройки апача в /etc/apache2

Внимание! Дальше приводится упрощенная схема для работы в лабораторных условиях.
На реальных серверах ввод в эксплуатацию без тщательного изучения документации по mod_jk, веб-серверу и томкату крайне опасен!
Нужно обратить особое внимание на настройки безопасности.

Теперь приступим. Начнем от фронта.
В настройках сайта (например: /etc/apache2/sites-available/default) указываем какие запросы куда перенаправлять и кто должен делать обработку таких запросов.
Например:

 
... 
    JkAutoAlias /usr/share/tomcat6-examples/
    JkMount /examples/* ajp13_worker

ajp13_worker – название “ажп-работника”, он задается в файле workers.properties (в Убунте: /etc/libapache2-mod-jk/workers.properties):

  # список работников...
  worker.list=ajp13_worker

Также в этом же файле нужно проверить другие параметры (порты, директории и т.д.).
Если нужна балансировка загрузки, там уже есть заготовка для раунд-робина.

Где находится файл workers.properties прописано в настройках mod_jk (в /etc/apache2/mods-available файл jk.load)
Например, что-то типа этого:

LoadModule jk_module /usr/lib/apache2/modules/mod_jk.so

JkWorkersFile /etc/libapache2-mod-jk/workers.properties

JkLogFile     /var/log/apache2/mod_jk.log
JkLogLevel    info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkRequestLogFormat     "%w %V %T"

JkOptions +ForwardURICompatUnparsed

На что обратить внимание!
Параметр JkWorkersFile указывает именно на правильный workers.properties
Параметр JkOptions имеет значение “+ForwardURICompatUnparsed”, это нужно для нормальной обработки кодировок.

Значение других параметров следует посмотреть в документации.

Далее в настройках томката (/etc/tomcat6/server.xml) нужно проверить,
что НЕ ЗАКОММЕНТИРОВАН AJP Connector (port 8009, URIEncoding=”UTF-8″):


 
   

Общая схема конфигурационных файлов выглядит так:

Не смотря на то, что в документации все хорошо описано, и есть такие полезные параметры как “JkAutoAlias”, которые сильно упрощают жизнь.
Рекомендую, после того как завершите настройку тщательно проверить надежность и безопасность вашей конфигурации.

По-крайне мере нужно проверить правильно ли будут работать ваши security-constraint и различные фильтры.
Также проверить ограничение доступа к служебным ресурсам, работу в разных режимах (отключен томкат, реальные запросы из внешней сети и т.д.).

Любое использование либо копирование материалов или подборки материалов сайта, элементов дизайна и оформления допускается лишь с разрешения правообладателя и только со ссылкой на источник: programador.ru

Телеграм канал: @prgrmdr
Почта для связи: vit [at] programmisty.com