Рубрики
3. Инструментарий Java

Apache HTTPD, mod_jk, Apache Tomcat, Linux

1. Начало.

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

  <!-- Прописать URIEncoding  -->
  <connector port="8080" URIEncoding="UTF-8"></connector>

Здесь и далее: Томкат => 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) указываем какие запросы куда перенаправлять и кто должен делать обработку таких запросов.
Например:

 <virtualhost>
... 
    JkAutoAlias /usr/share/tomcat6-examples/
    JkMount /examples/* ajp13_worker
</virtualhost>

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"):

<server>
 <!-- Define an AJP 1.3 Connector on port 8009 -->
   <connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"></connector>
</server>

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

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

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

Рубрики
Java

Java one, Day #2

Java One, День Второй. Москва.

По просьбе друзей выкладываю фотографии с конференции Java One. Фотки не мои, так что вопросы где взять исходные фотографии не ко мне.

Как я туда попал. Вначале идти не очень хотелось - дел по работе выше крыши. Но поскольку Java One мероприятия последнее время проводились в Питере, то я их постоянно пропускал, в итоге стало уж больно любопытно посмотреть что изменилось... Плюс  товарищ со старой работы сказал, что тоже пойдет, в общем в итоге любопытство взяло вверх.

Что изменилось?

На первое что обратил внимание - платный вход. Тарифы были такие:
Super Saver с 24 февраля по 20 марта, 2011: 500 руб
Early Bird с 21 марта по 31 марта, 2011 : 1000 руб
с 1 апреля по 11 апреля, 2011: 1500 руб
(правда для студентов потом открыли бесплатную регистрацию, но я уже давно не студент )

Само объявление о Java One увидел в твиттере, тогда еще был тариф Super Saver, так что прошел по минимальному прайсу. Правда с системой оплаты были какие-то глючки, но в итоге я свой билет получил.
Конференция проходила в здании Академии Наук, м. Ленинский проспект. Такое интересное здание с часиками.

По ходу были расставлены указатели куда идти.

На входе дежурили полицейские и проверяли сумки, рюкзаки. На редкость не хамоватые, наверно влияет аура здания Академии Наук.

Там же рядом сидела девушка с красным платочком на шее, помогала ориентироваться куда двигаться дальше.

Т.к. я пришел позже открытия, то к гардеробу очереди уже не было.

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

человек-дюк

Главный зал конференции конечно смотрелся мощно:

На входе стояли девушки в фирменной одежде и сканировали бейджики. Устройство для сканирования смутно видно внизу на фото:

Когда начался перерыв на кофе всю еду смели моментом. Вода в термосах закончилась почти сразу.

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

В этом помещении мастер-классы. Ноутбуки кажется DELL-ы.

Обед был в пластиковых наборах. В первый день некоторым еда не досталась, а на второй день видел как один парень съел две порции... Вот такой "культур-мультур", кто-то ходит голодный, кто-то хомячит за двоих )

Зато были организованы такие приятные места с красными пуфиками,  где был WiFi и можно было посидеть с ноутбуком.

Из чисто оракловых фишек, был занятный докладчик с очень красивым английским. Рассказывал про то как можно апгрейдить на живую оракловую БД (используя силу фичи - Edition). Грубо говоря как это делают сейчас у нас - когда наступает день Икс, отрубают всех пользователей и гонят ДБА-шников с программистами на работу на выходных (или в ночь), чтобы выложили новую версию в продакшн. Так вот, чтобы всем жилось легче, иногда ЭТО можно с помощью хитрых манипуляций делать постепенно и на живую. Главное знать когда это применимо и как это делать. Вот фото докладчика:

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