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.
apache tomcat reverseproxy mod_jk archlinux
Commentami!