Configurare Mod_jk per Apache Tomcat

Il nostro obbiettivo e fare comunicare Apache2 e Tomcat, in modo che il container non sia esposto direttamente sul web, ma tutto venga filtrato attraverso il web server (Apache2 in questo caso). Oltre a motivi legati alla sicurezza, in questo modo possiamo far servire i contenuti statici (html, immagini, css, js) al web server invece che al container, riducendo su di esso un carico inutile.

Per prima cosa dobbiamo installare in mod_jk nel caso non sia già stato installato
apt-get install libapache2-mod-jk

E attiviamolo
a2enmod jk

Ora creiamo il file /etc/apache2/workers.properties, nel quale andiamo a specificare i nostri worker (nella nostra configurazione uno solo).
Questa e la definizione nel nostro worker. Ho evidenziato due valori, worker.worker1.host e worker.worker1.port. Questi due valori devono essere compilati rispettivamente con l’host dell’installazione di Tomcat e la porta sulla quale il connector AJP di Tomcat è in ascolto. Se Tomcat è installato sulla stessa macchina e non è stato variata la configurazione di default del connector AJP, lasciate i valori da me impostati.
Per quanto riguarda gli altri parametri vi rimando alla guida ufficiale del workers.properties.

[shm]
file=/var/log/apache2/shm.file
size=1048576
# tomcat 5.5
worker.list=worker1
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8109
worker.worker1.lbfactor=50
worker.worker1.cachesize=10
worker.worker1.cache_timeout=600
worker.worker1.socket_keepalive=1
worker.worker1.reclycle_timeout=300

Ecco per completezza anche la configurazione del connector AJP presente sul file di configurazione di Tomcat /INSTALL_DIR_TOMCAT/config/server.xml. Per potete notare l’attributo port a cui facevo riferimento prima. Anche qui, per quanto riguarda il significato degli altri paramentri vi rimando alla guida ufficiale del Tomcat Connector.

Procediamo ora, controllando che il file di configurazione del mod_jk /etc/apache2/mods-enabled/jk.conf. Qui andiamo a definire il dove si trova il nostro file workers.properties, dove deve essere posto il file di log relativo alle attività del mod_jk e il livello di log relativo.
Il contenuto deve risultare così:

# The location where mod_jk will find the workers definitions
JkWorkersFile /etc/apache2/workers.properties

# The location where mod_jk is going to place its log file
JkLogFile /var/log/apache2/mod_jk.log

# The log level:
# – info log will contain standard mod_jk activity (default).
# – warn log will contain non fatal error reports.
# – error log will contain also error reports.
# – debug log will contain all information on mod_jk activity
# – trace log will contain all tracing information on mod_jk activity
JkLogLevel info

NOTA:In questo modo andiamo a settare questa configurazione per tutti VirtualHost; nel caso volessimo utilizzare il mod_jk su uno o solo alcuni VirtualHost, dobbiamo inserire le seguenti direttive dentro nella configurazione di ognuno di essi.

Ci siamo quasi. Ora dobbiamo soltando specificare sui nostri VirtualHost, come deve essere utilizzato il mod_jk.
Inseriamo la seguente direttiva prima della del tag di chiusura del VirtualHost interessato
JkMount /* worker1
Questa direttiva specifica che tutte le richieste (/*) che arrivano su apache per questo VirtualHost, devono essere passate al mod_jk, utilizzando il connettore specificato (worker1)
Per esempio nel caso volessimo girare a Tomcat solo le richieste per pagine jsp, possiamo utilizzare la direttiva in questo modo:
JkMount /*.jsp worker1

Ora non resta che riavviare Apache2. Se il restart va a buon fine, abbiamo configurato tutto correttamente.
/etc/init.d/apache2 restart

In caso si errori, controllate i log che abbiamo attivato nel file /var/log/apache2/mod_jk.log.