Home / Database & Server / Database & Server / Intergrare Apache e Tomcat
Mattepuffo

Intergrare Apache e Tomcat

Intergrare Apache e Tomcat

Più o meno tutti conosciamo Apache e Tomcat e il ruolo che hanno.

Apache è uno dei web server più usati ed in genere viene usato come web server per applicazioni scritte in PHP.

Tomcat è invece è un contenitore Servlet e viene usato per le applicazioni web scritte in Java (JSP e Servlet appunto).

In genere Apache gira sulla porta 80 e Tomcat sulla 8080.

Può rendersi necessario però fare in modo che anche i servizi di Tomcat siano raggiungibili senza indicare la porta, in quanto è una cosa scomoda.

E' possibile infatti integrare le due applicazioni per evitare ciò.

Prima di tutto installate e configurate Apache.

Poi installate e configurate Tomcat.

Una volta accertati che tutto funziona dobbiame riprendere in mano la configurazione di Apache.

Per integrare i due abbiamo principalmente due opzioni:

  • usare un ReverseProxy -> più lento ma più semplice da mettere su
  • usare il connettore jk -> più veloce ma richiede un pò più di configurazione

Cominciamo dal ReverseProxy.

Supponiamo di voler accedere alla pagina http://localhost:8080/book/index.jsp.

Prima di tutto nel file httpd.conf (il nome dipende da sistema operativo o distribuzione Linux) accertiamoci che questi due moduli

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

siano caricati.

Poi in fondo al file aggiungiamo questo:


ProxyPass http://localhost:8080/book/
ProxyPassReverse http://localhost:8080/book/

Riavviamo Apache.

Se adesso andate su http://localhost/book verrete automaticamente reindirizzati su http://localhost:8080/book/, cioè sulla pagina in ascolto su Tomcat.

Molto facile, ma anche poco più di un redirect; forse se avete molto traffico conviene la seconda strada.

Prima di tutto dovete installare il modulo mod_jk.

Alcune distro Linux ce l'hanno nei repo; su Archlinux:

# yaourt -Sy mod_jk

Sennò potete installarlo manualmente andando su questa pagina e mettendo il file mod_jk.so dentro la cartella modules di Apache e aggiungendo questa riga al file di configurazione:

LoadModule jk_module modules/mod_jk.so

Sempre nel file di configurazione alla fine aggiungete questo:

# Path di workers.properties
# è consigliabile inserire workers.properties nella stessa cartella di httpd.conf
JkWorkersFile conf/workers.properties

# Path dei log di jk
# è  consigliabile inserire mod_jk.log nella stessa cartella di access_log
JkLogFile logs/mod_jk.log

# Settiamo il livello del log di jk [debug/error/info]
JkLogLevel info

# Settiamo il formato del log
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "

# JkOptions indicano di inviare la SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories

# JkRequestLogFormat setta il formato della richiesta
JkRequestLogFormat "%w %V %T"

# Inviat tutto per il context /examples al worker dal nome worker1 (ajp13)
JkMount /book/* worker1

Prima abbiamo indicato il percorso del file workers.properties e del file di log.

Poi ci sono altre varie impostazioni e infine diciamo di girare a Tomcat una specifica chiamata.

Il file workers.properties sarà una cosa del genere:

worker.list=worker1
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
worker.worker1.lbfactor=50
worker.worker1.socket_keepalive=1
worker.worker1.socket_timeout=300

Queste sono alcune proprietà, dove type è obbligatoria ed indica il protocollo da usare.

La porta 8009 è quella predefinita da AJP.

In questo caso il nostro worker lo abbiamo chiamato worker1; volendo possiamo aggiungere tutti i worker che ci pare se abbiamo altre varie applicazioni.