Portál AbcLinuxu, 30. dubna 2025 11:26
Včera jsem se dlouhé hodiny snažil propojit Apache a Tomcat s pomocí protokolu AJP/1.3, tj skrze modul mod_jk. Ono mi to tedy v podstatě fungovalo již po instalaci, nikoliv však jen pro vybrané virtuální hostitele. Tápání po problému mě obohatilo o spoustu nových poznatků.
Instalaci jsem prováděl na serveru se SUSE 9.3, Apache je zde ve verzi 2.0.53, Tomcat pak 5.0.30. Po instalaci balíčku s modulem mod_jk-ap20 (nabízí se ve verzi 4.1.30) přibude v adresáři etc/apache2/conf.d soubor jk.conf; vzhledem k tomu, že ve výchozím nastavení v /etc/apache2/default-server.conf se do konfigurace webového serveru vkládají všechny konfigurační soubory z výše zmíněného adresáře, jsou tak po restartu Apache dostupné ukázkové webové aplice pro Tomcat, konkrétně servlets-examples a jsp-examples.
Obsah konfiguračního souboru (minimalizováno pro názornost) vypadá následovně:
<IfModule mod_jk.c> JkWorkersFile /etc/tomcat5/base/workers.properties JkLogFile /var/log/tomcat5/base/mod_jk.log JkLogLevel error Alias /servlets-examples "/srv/www/tomcat5/base/webapps/servlets-examples" <Directory "/srv/www/tomcat5/base/webapps/servlets-examples"> Options Indexes FollowSymLinks allow from all </Directory> JkMount /servlets-examples/servlet/* ajp13 <Location "/servlets-examples/WEB-INF/"> AllowOverride None deny from all </Location> </IfModule>Zajímavější jsou parametry začínající Jk:
Jak již jsem naznačil v úvodu, takto nadefinováno a nainstalováno vše funguje. Provozuji však na serveru vícero virtuálních hostitelů a připadá mi zbytečné, aby Tomcat byl navázán i tam, kde to nepotřebuji. Celkem přirozeně jsem proto zrušil odpovídající direktivu v default-server.conf a přidal ji do vybraných virtuálních hostitelů. Kupodivu to takto nefunguje – nevím proč, v dokumentaci jsem k tomu nic nenašel, ale parametr JkWorkersFile musí být uveden v konfiguračních souborech na místě, kde se uplatní pro všechny virtuální hosty (tedy například právě v default-server.conf)! Kýženého výsledku lze dosáhnout tak, že v konfiguraci virtuálních hostitelů budou ty ostatní parametry, tedy zejména odpovídající položka JkMount.
Na další zádrhel v této souvislosti jsem narazil u virtuálních hostitelů v Tomcatu. Ty se definují uvedením platného doménového jména u parametru name kontejneru Host v konfiguračním souboru Tomcatu server.xml. Pro server mám v DNS záznam typu *.muj.server.cz -> muj.server.cz
(wildcard DNS item, někde jsem o tom slyšel jako o doménovém koši) – správného virtuálního hostitele pak Apache vybere na základě jména, funguje to bezchybně. Nikoliv však v Tomcatu, přestože je cokoliv.muj.server.com v server.xml definován, odpovědi od http://cokoliv.muj.server.com:8080 se nikdy nedočkám Proč, proč, proč?
Tiskni
Sdílej:
... <Engine name="Catalina" defaultHost="localhost" debug="0"> ... <Host name="localhost" debug="0" appBase="webapps-default" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="localhost_log." suffix=".txt" timestamp="true"/> </Host> <Host appBase="webapps-virtual/jerryweb.info" name="jerryweb.info"> <Alias>www.jerryweb.info</Alias> <Alias>jaros.org</Alias> <Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="jerryweb_log." suffix=".txt" timestamp="true"/> <Context path="" docBase="" /> </Host> ... </Engine>Takto nastavených virtuálních serverů mám samozřejmě víc, konfigurační soubory pro jednotlivé aplikace pak mám v conf/Catalina/<jmeno_hostitele>/. U Apache mám v konfiguraci jednotlivých virtuálních serverů pouze JkMount resp. JkUnmount, zbytek mám nastaven jednotně pro celý webserver. Virtuální servery mi fungují jak při přístupu přes mod_jk, tak při přímém přístupu na Tomcata přes HTTP (pokud ho povolím). Co se týče přístupu k IP adrese browseru, s request.getRemoteAddr() jsem také nikdy problém nezaznamenal.
emerge -pv tomcat mod_jk These are the packages that I would merge, in order: Calculating dependencies ...done! [ebuild R ] www-servers/tomcat-5.0.27-r6 -doc -jikes 0 kB [ebuild R ] www-apache/mod_jk-1.2.13 +apache2 707 kB Total size of downloads: 707 kB
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.