Integracja Tomcat’a z serwerem Apache

java/j2ee, software Add comments

Zapewne zastanawiasz sie poco łączyć serwer Tomcata z serwerem Apache, skoro Tomcat ma wbudowany serwer www? Okazuje się jednak, że jest kilka powodów dla których integracja tych dwóch serwerów może być przydatna:

  • Po pierwsze integracja daje możliwość wykorzystania wszystkich dobrodziejstw jakie oferuje nam serwer Apache. A więc: obsługę CGI, PHP, Perla, obsługę modułów mod_rewrite, mod_headers, mod_expire.
  • Po drugie mamy możliwość wydzielenia na Apache’u wirtualnych hostów, każdy z własną instancją Tomcata. Możemy również wybranym użytkownikom hostingu “podarować w prezencie” obsługę jsp i serwletów ;)
  • Po trzecie możemy wykorzystać mechanizm Load balancer, dzięki któremu obsługa żądań użytkowników będzie rozkładana na kilka instancji Tomcat’a. Zmniejszając tym samym obciążenie pojedynczego serwera.

Przygotowanie gruntu

Znając już powód, dla którego chcemy połączyć oba serwery przystąpmy do działania. Na wstępnie zaznaczam, że opisywana tu metoda połączenia powinna działać dla serwerów Tomcat 4.0 i nowszych oraz serwerów Apache 2.0 i nowszych. Ja osobiście używam Tomcat 5.5 oraz Apache 2.2. Zakładam, że posiadasz podstawową wiedzę na temat konfiguracji obu serwerów i masz już je zainstalowane na swoim dysku. Jeśli nie, odsyłam do oryginalnej dokumentacji tomcat.apache.org oraz httpd.apache.org.

To co nam będzie potrzebne do komunikacji obu serwerów to moduł Apache’a mod_jk do ściągnięcia w wersji skompilowanej «tutaj». Przy ściąganiu należy zwrócić uwagę na dwie rzeczy: jaki mamy system operacyjny oraz jaką mamy wersje Apache’a. Po ściągnięciu pliku zmieniamy jego nazwę na mod_jk.so i przenosimy do katalogu /modules/ (lub /libexec/ w przypadku Linux’a) znajdującego się w głównym katalogu Apache’a. Teraz pozostała nam już tylko czysta konfiguracja.

Stwórz nowy plik workers.properties i umieść go w katalogu /conf/ Apache’a. Plik ten będzie opisywał dostępne instancje Tomcatów oraz ich konfiguracje. W moim przypadku będzie to tylko jedna instancja.

workers.properties:

 PROPERTIES |  kopiuj kod |? 
1
worker.list=worker1
2
 
3
worker.worker1.type=ajp13
4
worker.worker1.host=localhost
5
worker.worker1.port=8009
6
worker.worker1.socket_timeout=2000

Objaśnienie:

  • worker.list – określa listę dostępnych instancji Tomcata, dowolnie nazwanych.
  • worker..type – określa typ konkretnego robotnika, w moim przypadku jest to robotnik, który będzie używał protokołu ajpv13 do komunikacji między serwerami.
  • worker..host – określa nazwę hosta pod którym dostępny jest Tomcat.
  • worker..port – port na którym nasłuchuje Tomcat. Domyślnie dla ajp13 jest to port 8009.
  • worker..socker_timeout – czas oczekiwania na robotnika po upływnie, którego zgłoszony zostanie komunikat: server timeout.

Konfiguracja w pliku httpd.conf:

 Apache configuration |  kopiuj kod |? 
1
LoadModule jk_module modules/mod_jk.so
2
 
3
<IfModule jk_module>
4
  JkWorkersFile F:\Programy\Apache2.2\conf\workers.properties
5
  JkMount  /jsp-examples/* worker1
6
</IfModule>

Objaśnienie:

  • JkWorkersFile – wskazuje plik opisujący robotników.
  • JkMount – określa jaka ścieżka zostanie przekazana do jakiego robotnika. W moim przypadku wszystkie zapytania rozpoczynające sie od ścieżki http://localhost/jsp-examples/ będą obsługiwane przez worker1, czyli przez mojego Tomcata. Pozostałe zapytania będą obsługiwane przez Apache’a.

To już prawie wszystko. Sprawdźmy jeszcze czy connector ajp13 jest aktywny w Tomcat’ie i zakomentujmy connector odpowiedzialny za nasłuchiwanie Http. W tym celu w pliku server.xml, w katalogu /conf/ Tomcat’a, powinny znajdować się zapisy:

 XML |  kopiuj kod |? 
01
<Service name="Catalina">
02
 
03
  <!-- <Connector port="7080" maxHttpHeaderSize="8192" maxThreads="150" 
04
  minSpareThreads="25" maxSpareThreads="75" enableLookups="false" 
05
  redirectPort="8443" acceptCount="100" connectionTimeout="20000" 
06
  disableUploadTimeout="true" />
07
-->
08
 
09
  <Connector port="8009" enableLookups="false" redirectPort="8443" 
10
  protocol="AJP/1.3" />
11
 
12
 
13
</Service>

Show time

Teraz pozostało już nam tylko odpalić Apache’a, a następnie odpalić Tomcat’a. Spróbuj uruchomić adres http://localhost/ oraz http://localhost/jsp-examples. Jeśli wszystko działa, gratuluje udało się połączyć oba serwery!!!

Na koniec chciałbym zaznaczyć, że przedstawiona tu konfiguracja to minimum niezbędne aby oba serwery współpracowały. Możliwości konfiguracyjnych jest oczywiście znacznie więcej. Po szczegóły odsyłam do oryginalnej dokumentacji: The Apache Tomcat Connector oraz Workers How To.

3 Responses to “Integracja Tomcat’a z serwerem Apache”

  1. Bankowy Says:

    Blog dodaliśmy do ulubionych :) pozdrawiamy autora.

  2. zabawki dla dzieci Says:

    Masz wiecej informacji na ten tamat ?

  3. online Says:

    Przeczytaj caly blog jest bardzo dobry

Leave a Reply

Copyright © 2009 by Michał Stochliński. WP Theme & Icons by N.Design Studio
Kanał RSS Komentarze RSS Zaloguj się