Настройка связки Apache2 и Tomcat5

Tomcat

В директорию, например /usr/opt/ тащим tomcat5. (а если точнее, то я брал jakarta-tomcat-5.5.4, его мне порекомендовали как стабильный) Найти его можно тут: http://apache.alkar.net/jakarta/tomcat-5/v5.5.4/bin/jakarta-tomcat-5.5.4.tar.gz
Яву моим программерам захотелось вот такую j2sdk1.4.2_06. Поэтому тянем ее туда же в /usr/opt/. Брать можно тут http://java.sun.com/j2se/1.4.2/download.html
Надо выбрать Download J2SE SDK, согласиться с лицензией и скачать. Получаем файл j2sdk-1_4_2_06-linux-i586.bin.txt. Делаем ему chmod 755 и нажимаем. Архивчик само-распаковывается и получается директория j2sdk1.4.2_06, которую при желании можно переименовать в просто java %)
И того мы получили директории с томкатом и явой.
Проводим некоторые настройки томката.
#vim /usr/opt/tomcat/bin/catalina.sh.  

(Файл запуска и остановки томката, на него можно делать симлинк в /etc/rc2.d/, или какой там Вы runlevel используете).
В файле дописываем в начало самое главное.
JAVA_HOME=/usr/opt/j2sdk1.4.2_06

Такую же строчку дописываем в /etc/profile, чтобы каждый входящий знал где у него JAVA_HOME.
Правим когфиг томката. Прописываем ему virtualhost
#vim /usr/opt/tomcat/conf/server.xml  (И кто придумал конфиги на xml?) 

<Host name= «example.com» appBase= «/var/virt/www/example/webapps/» />
В каталог /var/virt/www/example/webapps/ кладем наш java проект.
В /usr/opt/tomcat/conf/server.xml должен быть описан коннектор для mod-jk
<Connector port=  «8009» protocol=  «AJP/1.3» />

Стартуем томкат
    /usr/opt/tomcat/bin/catalina.sh start

Смотрим, чтобы стартанулся, проверяем порт telnet localhost 8009, и если все нормально, забиваем на томкат (в смысле на этом настройку закончим):)

Apache

Переходим к настройкам apache2.
Для начала ставим все необходимое.
# apt-get install apache2 libapache2-mod-jk2

Создаем VirtualHost для apache2.
#vim /etc/apache2/sites-available/example.com



    <VirtualHost 62.149.0.252:80>

        ServerName example.com

        ServerAdmin webmaster@example.com

        DocumentRoot  /var/virt/www/example/webapps/

        UseCanonicalName off

        CustomLog /var/log/apache2/example/access.log      combined

        ErrorLog /var/log/apache2/example/error.log

    </VirtualHost>

Не забываем создать директорию /var/log/apache2/example/, иначе апач не запустится.
Включаем этот virtualhost
#ln -s /etc/apache2/sites-available/example.com /etc/apache2/sites-enabled/01_example


Привязка Tomcat к Apache

Приступаем к самому главному, к связке апача и томката.
#cd /etc/apache2/mods-enabled/

    #ln -s /etc/apache2/mods-available/jk2.conf jk2.conf

    #ln -s /etc/apache2/mods-available/jk2.load jk2.load



    #cat /etc/apache2/mods-available/jk2.conf

    JkSet config.file /etc/apache2/workers2.properties

Осталось последнее, отредактировать /etc/apache2/workers2.properties
# vim /etc/apache2/workers2.properties



    [logger] # описываем логер

    info=Native logger

    level=ERROR



    [config:] # описываем свое местоположение

    file=/etc/apache2/workers2.properties

    debug=0

    debugEnv=0



    [uriMap:]

    info=Maps the requests.

    debug=0



    [shm:]

    info=Scoreboard. Required for reconfiguration and status with multiprocess

    servers

    file=anonymous

    debug=0



    [workerEnv:]

    info=Global server options

    timing=0

    debug=0



    [lb:lb]

    info=Default load balancer.

    debug=0



    [channel.socket:localhost:8009]   # описывается где и на каком порту нас слушает томкат

    info=Ajp13 forwarding over socket # я так думаю, что можно томкат и апач на разных машинах ставить.

    debug=0      # Не пробовал.

    tomcatId=localhost:8009



    [uri:/*.jsp]

    info=JSP Extension mapping.

    debug=0

Это говорит, что все что jsp надо спрашивать у томката. Но тут появились грабли, мои программеры не все свои ссылки делают на. jsp. Уж так они пишут.
Поэтому дописываем еще вот такое:
[uri:example.com/*]

    info= example JSP

    debug=0

И теперь все что example.com, то-есть все что лежит в /var/virt/www/example/webapps/ нам отдает томкат.
Виртуальные хосты, которым ява не надо не вписываем просто таким способом ;)
Запускаем апач, проверяем в браузере http://example.com, уходим пить пиво %)
Единственное что мне тут не понравилось, то что если в проекте есть картинка или простая html, то ее сначала обрабатывает tomcat а потом отдает apache. Но никто не мешает положить картинки отдельно ;)
Есть еще несколько способов, чтобы на сервере стоял и апач и томкат и все отдавалось в браузере по урлу без указания порта, тоесть просто и удобно.
  1. Можно все что идет на example.com на 80 порт форвардить на 8080, куда повесить томкат.
  2. В днс можно http запросы отправлять на http://example.com:8080 притом в браузере все время будет показываться урл http://example.com