Apache za JBossem na Ubuntu

Artykuł dotyczy stawiania jbossa za serwerem apache

Po co

Jboss jest pełnosprawnym serwerem www. Po co więc stawiać przed nim apacza?

bezpieczeństwo
Ja się na administracji JBossem bardzo słabo znam. Mogę pozmieniać hasła do konsol i tak dalej… Ale ogólnie nie mam wiedzy i pewnie coś przeoczę. Kiedy stawiam z przodu JBossa apacza dokładnie kontroluje które urle są forwardowane do jbossa a które nie. Na zewnątrz wystawiam po prostu te aplikacje które chcę wystawić a reszta jest domyślnie schowana.
load balancing
Apache może służyć jako load balancer za którym stoi kilka serwerów.

Mniej ważne

szybkość
Apacze może wysyłać statyczne zasoby. Odciąża to jbossa.
gzipowanie
Apache może też gzipowac wysyłane strony

Jak

Jest coś takiego jak Apache Tomcat Connector, czyli coś co łączy apacza i tomcata. Przypominam że w Jbossie tomcat serwuje strony.

Apache

Konektor od strony apacza jest modułem. Moduł ten nazywa się jk.

Instalacja

W Ubuntu trzeba zainstalować paczkę Apache Tomcat Connector.

Konfiguracja

ogólnie o konfiguracji apacza pod Debianem

Katalog /etc/apache2/mods-available zawiera pliki konfiguracyjne modułów apacza. Pliki tam są grupowane parami.

nazwa-modu.load
Zawiera dyrektywę ładującą moduł do apacza
nazwa-modu.conf
Konfiguruje moda

Instalacja naszego moda powinna już stworzyć pliczek jk.load. Który załaduje moda. Teraz trzeba go tylko skonfigurować.

Przykładowa konfiguracja ze strony jbossa:

# Where to find workers.properties
JkWorkersFile workers.properties

# Where to put jk logs
JkLogFile  /var/log/apache2/jk.log

# Set the jk log level [debug/error/info]
JkLogLevel info

# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"

# JkOptions indicates to send SSK KEY SIZE
# Notes: 
# 1) Changed from +ForwardURICompat. 
# 2) For mod_rewrite compatibility, use +ForwardURIProxy (default since 1.2.24)
# See http://tomcat.apache.org/security-jk.html  
JkOptions +ForwardKeySize +ForwardURICompatUnparsed -ForwardDirectories

# JkRequestLogFormat
JkRequestLogFormat "%w %V %T"

#JkMount /* jboss

JkMount /shadenfreude jboss

JKMount /shadenfreude/* jboss

# You can use external file for mount points.
# It will be checked for updates each 60 seconds.
# The format of the file is: /url=worker
# /examples/*=loadbalancer
JkMountFile uriworkermap.properties

Konfiguracja ta prócz masy magii zawiera dwa odniesienia: do pliku zawierającego własności workerów oraz do pliku zawierającego jakie requesty będą forwardowane do Tomcata.

### JkMount

JkMount informuje apacza że dany url ma być forwardowany do Tomcata. JkUnMount działa w odwrotny sposób. Są one parsowane w kolejności napotkania więc taki układ dyrektyw
spowoduje że obrazki z aplikacji shandenfreunde nie będą przetwarzane

JkMount shadenfreunde/*
JkUnMount shadenfreunde/images*

### Workery

Worker to instancja Tomcata która jest gotowa przetwarzać żądania.

Plik worker.properties u mnie wygląda tak:

worker.list=jboss
worker.jboss.type=ajp13

Na stronie Jbossa pokazują przykład konfiguracji z loadbalancingiem:

Urle

Drugim plikiem jest zapis mapowań urli.

TODO Na razie po prostu: musi on istnieć bo inacej apacz nie wstanie.

Ładowanie modułu.

Teraz jeszcze musimy uruchomić dany moduł.

a2dismod module
a2enmod module
/etc/init.d/apache2 force-reload

Konfiguracja jbossa

To jest akurat proste ;).

Edytujemy server.xml znajdujący się w katalogu $JBOSS_HOME/server/all/deploy/jbossweb.sar/server.xml, gdzie all to rodzaj serwera używany przez was.

Trzeba dodać do tagu <Engine parametr jvmRoute=nazwa-workera-której-odpowiada-ten-serwer. Czyli wygląda on tak:

<Engine name="jboss.web" defaultHost="localhost" jvmRoute="jboss">
.
</Engine>

Oraz upewnić się że konektor ajp jest włączony:

<!-- A AJP 1.3 Connector on port 8009 -->
<Connector port="8009" address="${jboss.bind.address}"
      emptySessionPath="true" enableLookups="false" redirectPort="8443" 
      protocol="AJP/1.3" connectionTimeout="600000" maxThreads="200"/>

Po tych zmianach restartujemy jbossa.

Żródła, dalsze czytanki:

O ile nie zaznaczono inaczej, treść tej strony objęta jest licencją Creative Commons Attribution-NonCommercial-NoDerivs 3.0 License