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.
<Connector  port="8109
enableLookups=”false”
redirectPort=”8443″
protocol=”AJP/1.3″
maxThreads=”2000″
maxSpareThreads=”1000″ />

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.

In caso di dubbi e problemi, commentate come al solito.

Share and Enjoy:
  • Facebook
  • Google
  • LinkedIn
  • Technorati
  • del.icio.us
  • Ma.gnolia
  • MySpace
  • Segnalo

, , , , , , ,

  1. #1 by Mario - settembre 28th, 2009 at 11:41

    Ciao complimenti per la guida, l’ho seguita e funziona tutto, tranne che sotto tomcat ho un’action che genera un file pdf che non viene chiamato sotto apache, mentre se accedo direttamente a tomcat funziona, non è che devo configurare qualcos’altro sotto Apache?
    Grazie

  2. #2 by manuele - settembre 28th, 2009 at 11:52

    Ciao Mario, grazie per i complimenti, anche se è un po di tempo che non riesco a seguire il blog come vorrei…
    Per quanto riguarda il tuo problema, come hai impostato il parametro JkMount?
    Inoltre, se hai impostato JkLogFile, riesci a vedere cosa succede alla tua richiesta?

  3. #3 by Mario - settembre 28th, 2009 at 14:46

    Ciao il JkMount /* worker1, mentre nel mod_jk.log non c’è niente e l’ho settato ad info

(will not be published)
  1. No trackbacks yet.