...

Apache e Tomcat su GNU/Linux

by user

on
Category: Documents
34

views

Report

Comments

Transcript

Apache e Tomcat su GNU/Linux
Sistemisti Indipendenti.ORG
http://www.sistemistiindipendenti.org
e-mail: [email protected]
Apache e Tomcat su GNU/Linux
Anche l’utilizzo di pagine JSP non rappresenta un problema sotto GNU/Linux. Ovviamente per
poter fare in modo che il nostro sistema sia in grado di interpretarle non basta un normale
server web come Apache, ma è necessario un apposito software, Jakarta disponibile sotto
diverse piattaforme , tra cui GNU/Linux sia in formato sorgente che binario.
Ovviamente questo sistema necessita del compilatore Java (J2SDK) oramai già preinstallato
su molte distribuzioni.
La configurazione migliore prevede inoltre di poter far dialogare Apache, a cui siamo
ovviamente abituati, e Tomcat in modo che quest’ultimo si occupi solo di gestire i contenuti
jsp.
E’ proprio questo che cercheremo di fare, facendo coesistere i due ambienti. Per poter
realizzare completamente il sistema abbiamo bisogno di:
? Java VM (J2SDK)
? Jakarta- Tomcat
? Apache con supporto DSO
? Connector per Apache (mod_jdk2)
Ma partiamo dall’inizio…………
Introduzione: Cosa sono Servlet e JSP
Le Java Servlet e JSP rappresentano due nuovi strumenti di programmazione creati dalla Sun
Microsystems, che permettono di realizzare di pagine web dinamiche.
Sono derivati da Java con cui condividono la sintassi:
?
le Servlet permettono di sviluppare moduli software indipendenti, per gestire pagine
web, anche molto complesse.
Possono essere viste come degli oggetti Java eseguiti direttamente dal server web,
attraverso una JVM (Java Virtual Machine), da inviare al browser. Rispetto agli applet
Java, eseguiti sul client, sono applicazioni eseguite sul lato server che producono un
output, ovvero una pagina HTML, che viene successivamente inviata al client.
?
le JSP (Java Server Pages) invece permettono più semplicemente di inserire codice
Java tra i tag delle pagine HTML.
In genere una servlet può essere richiamata in una pagina HTML, invece una pagina JSP
è qualche cosa di più strutturato, poiché fonde HTML (oppure XML), altri componenti
EJB (Enterprise Java Beans), altre applicazioni Servlets oppure codice Java. In pratica
possiamo vedere le JSP come il contenitore finale in cui fa confluire tutti i metodi che
JAVA consente di utilizzare, per generare pagine dinamiche e veri e propri moduli
software interpretati dal browser, grazie al supporto JSP che il server offre.
Con questi due strumenti si possono sviluppare ed implementare applicazioni totalmente web
oriented, anche molto complesse superando le tradizionali limitazioni e la staticità che
contraddistingue le pagine web.
Installazione JAVA (J2SDK)
Sistemisti Indipendenti.ORG
Sistemisti Indipendenti.ORG
http://www.sistemistiindipendenti.org
e-mail: [email protected]
L’installazione da noi effettuata è stata fatta su Slackware 8.1 kernel 2.4.21, distro su cui
l’ambiente Java non è preinstallato (lo abbiamo fatto appositamente).
Quindi per prima cosa dobbiamo installare JAVA :
Download Java 2 Platform, Standard Edition – Official Download Page
http://java.sun.com/j2se/1.4.2/download.html
self-extracting file (j2sdk-1_4_2_03-linux-i586.bin, 34.16 MB)
?
Alternativamente si può anche prelevare da:
ftp://ftp.tux.org/java/JDK-1.4.2/i386/rc1/
cd /usr/src
sh j2sdk-1_4_2_03-linux-i586.bin
………….
Creating j2sdk1.4.2_03/jre/lib/rt.jar
Creating j2sdk1.4.2_03/jre/lib/jsse.jar
Creating j2sdk1.4.2_03/jre/lib/charsets.jar
Creating j2sdk1.4.2_03/jre/lib/ext/localedata.jar
Creating j2sdk1.4.2_03/jre/lib/plugin.jar
Creating j2sdk1.4.2_03/jre/javaws/javaws.jar
Done.
viene creata la directory j2sdk1.4.2_03/
Su slackware 9.1 è già installata e la dir è in /usr/lib/java, utilizzeremo quindi gli stessi
percorsi anche su questo sistema , in modo da mantenere una certa uniformità.
Aggiorniamo i path aggiungendo i /etc/profile
JAVA_HOME="/usr/lib/java"
export JAVA_HOME
Aggiungia mo alla variabile PATH
# Set the default system $PATH:
PATH="/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:$JAVA_HOME/bin"
*la variabile JAVA_HOME deve precedere la variabile PATH
Proviamo se rispondono i comandi
root@box:~# java -version
java version "1.4.2_03"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_03-b02)
Java HotSpot(TM) Client VM (build 1.4.2_03-b02, mixed mode)
Come usare Java
Se volessimo provare (si fa pe dire) a compilare un sorgente java e ad eseguirlo potremmo
operare in questo modo:
Per compilare un sorgente in formato java:
Sistemisti Indipendenti.ORG
Sistemisti Indipendenti.ORG
http://www.sistemistiindipendenti.org
e-mail: [email protected]
javac Classe.java
Per eseguire un'applicazione:
java Classe
Ad esempio:
----------import java.io.*;
class print_stringa {
public static void main(String args[])
{
System.out.print("Stringa di Prova\n");
}
}
----------Compila:
javac stringa.java
Esegue:
java print_stringa
Stringa di Prova
Installazione e uso di Tomcat
Passiamo adesso all’installazione di Tomcat, il vero protagonista della nostra dimostrazione.
Installazione
Tomcat è un Application Server che consente di sviluppare applicazioni Web in grado di
generare pagine web dinamiche con tecnologia Java e J2EE, come ad esempio Java Servlet e
JSP.
Tomcat incorpora anche un normale webserver di cui supporta tutte le principali funzioni.
Download di tomcat
wget http://freshmeat.net/redir/tomcat/19610/url_tgz/jakarta-tomcat-4.1.29-src.tar.gz
wget http://distfiles.coredump.cn/jakarta-tomcat-5.0.18.tar.gz
L’installazione è davvero semplice ed immediata se si utilizza il file binario che richiede davvero
poche operazioni per poter utilizzare Tomcat sul sistema.
Scompattare
root@box:/usr/src# tar xvfz jakarta-tomcat-5.0.18.tar.gz
mv jakarta-tomcat-5.0.18 /usr/lib
cd /usr/lib
ln -s jakarta-tomcat-5.0.18 tomcat
Aggiorniamo il path in /etc/profile
CATALINA_HOME="/usr/lib/tomcat"
export CATALINA_HOME
Sistemisti Indipendenti.ORG
Sistemisti Indipendenti.ORG
http://www.sistemistiindipendenti.org
e-mail: [email protected]
# Set the default system $PATH:
PATH="/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:$JAVA_HOME/bin:$CATALINA_HOME/bin"
Configurazione accesso
Per poter accedere e gestire Tomcat occorre aggiungere un utente amministratore prima della
partenza del server.
Per fare questo occorre accedere alla directory delle configurazioni ed editare il file tomcatusers.xml e adattarlo alle nostre esigenze
<tomcat-users>
<user name="paolo" password="*****" roles="admin,manager" />
<user name="tomcat" password="tomcat" roles="tomcat" />
<user name="role1" password="tomcat" roles="role1" />
<user name="both" password="tomcat" roles="tomcat,role1" />
</tomcat-users>
Per poter gestire Tomcat ed integrarlo con Java dobbiamo copiare
cd /usr/lib/tomcat
cp common/lib/servlet-api.jar /usr/lib/java/jre/lib/ext –a
Con questa libreria potremo compilare le nostre Servlet application e JSP
Avvio di Tomcat
Per la gestione dell’avvio e dello shutdown del server Tomcat
Avvio server:
startup.sh
root@box:/usr/lib/tomcat# startup.sh
Using CATALINA_BASE: /usr/lib/tomcat
Using CATALINA_HOME: /usr/lib/tomcat
Using CATALINA_TMPDIR: /usr/lib/tomcat/temp
Using JAVA_HOME:
/usr/lib/java
Chiusura server:
shutdown.sh)
Il server risponde dei default alla porta 8080 spesso usata da altri servizi (come il proxy). Per modificare
la porta su cui risponde editare nella directory conf il file server.xml e modificare la direttiva
<!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 -->
<Connector port="8080"
impostando la porta desiderata,
Adesso accedendo con un normale browser potremo effettuare l’amministrazione del server e gestire le
applicazioni contenute nella directory webapps.
Finalmente il nostro tomcat, supporterà le normali pagine Web ma anche le pagine con estensione jsp.
Questo è la home di Apache/Tomcat:
Sistemisti Indipendenti.ORG
Sistemisti Indipendenti.ORG
http://www.sistemistiindipendenti.org
e-mail: [email protected]
Costruire una pagina JSP
A questo punto possiamo cominciare a creare o meglio programmare le nostre pagine jsp.
Ma come funziona il nostro Java Server?
Interpreta pagine al cui interno sono racchiuse istruzioni e parti di codice in linguaggio JAVA,
tra tag del tipo <% e %>. Queste pagine devono necessariamente essere salvate con
estensione .jsp per poter essere interpretate.
Quando il file viene richiesto al Tomcat server questi lo compila, generando un oggetto
chiamato appunto java servlet e lo mantiene in memoria, per poter essere utilizzato
successivamente.
A questo punto l’output prodotto viene inviato e qundi interpretato dal browser come se fosse
una qualsiasi pagina in formato HTML .
In pratica il nostro server agisce da compilatore in-line, velocizzando di molto il processo di
creazione delle pagine, infatti per tutte le richieste che non comportano modifiche alle pagine
originali, non ci sarà bisogno di effettuare nuove compilazioni ed il processo di generazione ed
invio al browser della pagina sarà velocissimo.
Per provare se questo risponde a verità creiamo una semplice pagina jsp con una sintassi
minimale del tipo:
<HTML>
<BODY>
<H1> Pagina JSP di Prova</H1>
<p>
<%="Pagina JSP di Prova" %>
</BODY>
La salviamo con il nome di esempio1.jsp e la depositiamo sotto la directory webapps/ROOT. A
questo punto la richiamiamo dal browser. Se successivamente la modifichiamo e la
richiamiamo sarà necessario un certo tempo per rigenerare il nuovo servlet e poi inviare
l'output al browser. In caso contrario questa operazione non verrà svolta.
Siccome non è obiettivo di questo documento occuparsi di programmazione delle jsp vi
rimando all’ottima guida di HTML.it
?
http://www.html.it/jsp/jndex.htm
Sistemisti Indipendenti.ORG
Sistemisti Indipendenti.ORG
http://www.sistemistiindipendenti.org
e-mail: [email protected]
Integrazione Apache e Tomcat
Spesso si intende utilizzare Tomcat in abbinata con Apache in modo che il primo si occupi in
modo trasparente di eseguire le pagine jsp lasciando ad apache il suo ruolo principale di
webserver.
Cominciamo con il cercare il modulo (connector) per far lavorare insieme Apache e Tomcat.
Download del Modulo
wget http://www.apache.org/dist/jakarta/tomcat-connectors/jk2/jakarta-tomcat-connectorsjk2-src -current.tar.gz
tar xvfz jakarta-tomcat-connectors-jk2-src -current.tar.gz
Compilazione del modulo per Apache
cd /usr/lib/tomcat/jakarta-tomcat-connectors-jk2-2.0.2-src/jk/native2
root@box:/usr/lib/tomcat/jakarta-tomcat-connectors-jk2-2.0.2-src/jk/native2#
with-apxs=/usr/sbin/apxs
./configure --
make
cd /usr/lib/tomcat/jakarta-tomcat-connectors-jk2-2.0.2-src/jk/build/jk2/apache13
cp mod_jk2.so /usr/libexec
? Apache per poter utilizzare il modulo in questione deve essere stato compilato con il
supporto mod_so per caricare dinamicamente i moduli (DSO).
root@box:/home/tomcat/logs# httpd -l
Compiled-in modules:
http_core.c
mod_so.c
Andrà quindi installato eseguendo il configure in questo modo:
./configure --prefix=/usr/local/apache --enable-so --enable-rewrite \
--enable-ssl --with-ssl=/usr/local/ssl --enable-proxy
Configurazione del file server.xml (avvio di Tomcat per appoggio ad Apache)
Questo file determina il comportamento del tomcat server, infatti contiene tutte le informazioni
riguardanti il server.
Nel caso in cui si voglia integrare Apache con Tomcat va comunque modificato dopo essersene
fatti una copia di backup.
<Server port="8005" shutdown="SHUTDOWN" debug="0">
<Service name="Tomcat-Apache">
<Connector className="org.apache.ajp.tomcat.Ajp13Connector"
port="8009" minProcessors="5" maxProcessors="75"
acceptCount="10" debug="0"/>
Sistemisti Indipendenti.ORG
Sistemisti Indipendenti.ORG
http://www.sistemistiindipendenti.org
e-mail: [email protected]
<Engine name="your_engine" debug="0" defaultHost="your_domain.com">
<Logger className="org.apache.catalina.logger.FileLogger"
prefix="apache_log." suffix=".txt"
timestamp="true"/>
<Host name="your_domain" debug="0" appBase="webapps"
unpackWARs="true">
<Context path="" docBase="/home/tomcat/your_application"
debug="0" reloadable="true" />
</Host>
</Engine>
</Service>
</Server>
?
Il Context path non è il path tomcat/webapps ma il path dove metteremo le applicazioni
jsp che Apache dovrà interpretare perché dialoga con Tomcat.
Nel nostro caso:
adduser tomcat
mkdir /home/tomcat/public_html
chown tomcat.users /home/tomcat/public_html/
quindi: Context path="" docBase="/home/tomcat/public_html
?
Il server apache + mod_jk2 ascolta sulla porta 8009 e quindi solo su questa deve
ascoltare Tomcat. Il suo funzionamento sarà diverso da quello “standalone” dove lui
gestiva tutte le connessioni, fungendo da server web in modo completo. In questo
contest o il suo ruolo viene relegato alla gestione della parte jsp e solo alle sessioni
provenienti dalla chiamate di Apache su porta 8009.
Ecco perché il file server.xml, perfetto per un funzionamento di Tomcat standalone va
modificato nel caso in cui lo si voglia integrare con Apache.
Configurazione Apache
#Configurazione modulo
LoadModule jk2_module
AddModule mod_jk2.c
libexec/mod_jk2.so
#per jdk
<IfModule mod_jk.c>
JkWorkersFile "/usr/lib/tomcat/conf/workers.properties"
JkLogFile "/usr/lib/tomcat/logs/mod_jk2.log"
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
</IfModule>
? la versione di Apache utilizzata è la 1.3.29
Configurazione del file workers.properties
http://jakarta.apache.org/tomcat/tomcat-4.1-doc/jk2/jk2/confighowto.html
JK2 richiede per funzionare due file di configurazione
Sistemisti Indipendenti.ORG
Sistemisti Indipendenti.ORG
http://www.sistemistiindipendenti.org
e-mail: [email protected]
?
?
jk2.properties:
è utilizzato dal lato Tomcat side. Il su path è in genere
$TOMCAT_HOME/conf .
workers2.properties: è utilizzato dal webserver. Per Apache il path di default è nella
ServerRoot/conf.
Questo file è necessario per fare in modo che Apache sia in grado di passare le chiamate a
Tomcat.
Un file utilizzabile senza necessità di modifiche lo si può trovare nella directory /conf del
modulo jakarta-tomcat-connectors.
Si può copiare quella nella directory dei file di configurazione di jakarta e poi far ripartire prima
Tomcat e poi Apache.
Nel mio caso:
cd /usr/src/JAVA/jakarta-tomcat-connectors-jk2-2.0.2-src/jk/conf
cp workers2.properties /usr/local/apache/conf
Inoltre dobbiamo verificare che il file jk2.properties sia in /usr/lib/tomcat/conf
Una configurazione minima per questi due file può essere:
? http://jakarta.apache.org/tomcat/tomcat-4.1-doc/jk2/jk2/confighowto.html
jk2.properties
# The default port is 8009 but you can use another one
channelSocket.port=8019
#That is all needed on the Tomcat side to configure the JK2.
workers2.properties
# Define the communication channel
[channel.socket:localhost:8009]
info=Ajp13 forwarding over socket
tomcatId=localhost:8009
# Map the Tomcat examples webapp to the Web server uri space
[uri:/examples/*]
info=Map the whole webapp
Dopo aver modificato questi file possiamo far ripartire Tomcat.
Con nmap possiamo controllare i servizi in ascolto sulle porte:
80/tcp open http
8009/tcp open ajp13
8080/tcp open http-proxy
Dopo aver posizionato questo due file ed averli adattati alle nostre esigenze, possiamo
configurare il virtualhost.
Configurazione del Virtualhost
NameVirtualHost 192.168.10.2:80
<VirtualHost 192.168.100.2>
ServerAdmin [email protected]
Sistemisti Indipendenti.ORG
Sistemisti Indipendenti.ORG
http://www.sistemistiindipendenti.org
e-mail: [email protected]
ServerName www.test.it
DocumentRoot /home/tomcat/public_html
ErrorLog /home/tomcat/logs/error_log
CustomLog /home/tomcat/logs/access_log common
<IfModule mod_jk.c>
JkWorkersFile "/usr/lib/tomcat/conf/workers2.properties"
JkMount /servlet/* ajp13
</IfModule>
</VirtualHost>
A questo punto si può provare a far partire Apache dopo averne controllato la correttezza della
sintassi:
apachectl configtest
A questo punto possiamo far partire Apache dando un’occhiata ai file di log
apachectl start
Nel file error_lo g
[Wed Feb 04 16:02:16 2004] ( info) [mod_jk2.c (290)]: mod_jk child init
[Wed Feb 04 16:02:16 2004] ( info) [mod_jk2.c (298)]: mod_jk.post_config() init worker env
[Wed Feb
4 17:02:16 2004] [notice] Apache/1.3.29 (Unix) mod_jk2/2.0.2 PHP/4.3.3 mod_ssl/2.8.16
OpenSSL/0.9.7c configured -- resuming normal operations
Per compatibilità di configurazione
Controllare in jdk2.log eventuali errori di puntamento dei file.
Ora proviamo se funziona:
Creiamo un pagina in JSP
<HTML>
<BODY>
<H1> La mia prima JSP </H1>
<%out.println("PRIMA PROVA DI JSP");%>
</BODY>
</HTML>
E la richiamiamo dal virtualhost
http://host/esempio.jsp
Avremo la nostra pagina senza passare dal Tomcat server su porta non standard e potremo
utilizzare Apache per la gestione di tutte le nostre altre pagine o applicazioni (HTML, php, cgi
ecc ecc).
Risorse
? http://www.linuxgazette.com/issue95/millson.html
? http://jakarta.apache.org/tomcat/tomcat-4.1-doc/jk2/jk2/vhosthowto.html
? http://www.apache.org/dist/jakarta/tomcat-connectors/jk2/source/
? http://www.cymulacrum.net/tomcat/jk2_compile.html
Sistemisti Indipendenti.ORG
Sistemisti Indipendenti.ORG
http://www.sistemistiindipendenti.org
e-mail: [email protected]
?
?
http://www.ejbsolutions.com/products/obox/community/ch15.html
http://www.cardon.biz/docs/tomcat/install_tomcat.html
? Direttive del mod_jk
http://jakarta.apache.org/tomcat/tomcat-4.1doc/jk2/jk/aphowto.html#mod_jk%20Directives
? Varie
http://projects.accessibilityforum.org/tomcat-docs/jk2/jk/aphowto.html
Apache e Tomcat: la soluzione ProxyPass
Questa metodologia risolve molti problemi di compatibilità, nell’utilizzo del modulo sotto
Apache (connector) e rendono semplice l’operazione.
Supponiamo di avere Apache in funzione sul sistema su porta 80 e Tomcat su porta 8081,
possiamo usare Apache come Reverse Proxy per dirottare verso Tomcat determinate richieste,
che in genere sono identificate da un percorso ben preciso, verso cui effettueremo un redirect.
Si possono far dialogare i due sistemi usando il modulo ProxyPass in questo modo:
#httpd.conf
LoadModule proxy_module /usr/libexec/mod_proxy.so
AddModule mod_proxy.c
ProxyPass
/jsp http://localhost:8081/jsp_esempi
ProxyPassReverse /jsp http://localhost:8081/jsp_esempi
/jsp = path per le applicazioni java, jsp
Creiamo la directory per depositare i nostri applicativi jsp
mkdir /usr/lib/tomcat/webapps/ROOT/jsp_esempi
* il forward avviene solo per path che contengono /jsp, in questo modo potremo dirottare a
tomcat su porta 8081, solo le chiamate per le pagine jsp residenti in /jsp (URL) e
$TOMCAT_WEBROOT/jsp_esempi (URI).
A
questo
punto
depositiamo
un
file
con
estensione
.jsp
in
/usr/lib/tomcat/webapps/ROOT/jsp_esempi e richiamiamolo dal browser attraverso Apache.
links http://host/jsp/esempio.jsp
Dovrà generarsi la pagina jsp e dovremo poterla visualizzare nel nostro browser.
Inoltre deve essere specificato un connector apposta per Tomcat del tipo:
<Connector className="org.apache.catalina.connector.http.HttpConnector"
port="8081" ...
proxyName="www.mycompany.com"
proxyPort="80"/>
Sistemisti Indipendenti.ORG
Sistemisti Indipendenti.ORG
http://www.sistemistiindipendenti.org
e-mail: [email protected]
In genere si può trovare in server.xml già i connector specifici come ad esempio :
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false"
acceptCount="100" debug="0" connectionTimeout="20000"
proxyPort="80" disableUploadTimeout="true" />
Per maggiori informazioni:
? http://jakarta.apache.org/tomcat/tomcat-5.0-doc/proxy-howto.html
JSP Risorse in generale
?
?
?
?
?
In
?
?
?
?
http://www.risorse.net/jsp/guida.asp
http://www.html.it/jsp/index.html
http://www.google.com/search?hl=it&ie=ISO-8859-1&q=jsp+manuale&lr=lang_it
http://www.linuxjava.net/howto/webapp/
http://jakarta.apache.org/tomcat/tomcat-4.1-doc/jk2/jk/workershowto.html
Italiano
http://www.cercamanuali.it/manuale-guida/tomcat.htm
http://www.latoserver.it/cocoon/install_c1/
http://web.cefriel.it/formazionetutor/materiale/labSO/apache-tomcat-linux.pdf
http://www.apogeonline.com/webzine/2002/11/07/14/200211071401
Note
Non sono un esperto dell’argomento (si vede ?), ma ho voluto offrire la mia piccola
esperienza, viste le richieste da parte di alcuni utenti.
Consiglio comunque di appoggiarsi alla documentazione ufficiale e ai molti howto che si
possono trovare su web, sicuramente migliori del mio.
Se qualcuno fosse in grado di integrare o migliorare o riscrivere del tutto questo documento
me lo faccia sapere che glielo pubblico subito!
Se volete invece cercare di approfondire l’argomento in generale vi consiglio di passare da
Thinking in Java:
?
http://www.planetpdf.com/mainpage.asp?WebPageID=314
Doc: apache-tomcat.pdf
Dott. Paolo PAVAN [Netlink Sas]– [email protected]
Status: Bozza (in attesa di revisione)
Data : 2003/2004
Note finali
?
?
?
?
?
Il presente documento è a semplice scopo divulgativo
L’autore non si assume la responsabilità di eventuali danni diretti o indiretti derivanti dall'uso dei programmi, o
dall’applicazione delle configurazioni menzionate nel seguente articolo
I marchi citati sono di proprietà dei rispettivi proprietari e sono stati utilizzati solo a scopo didattico o divulgativo.
L’uso o il riutilizzo del presente articolo è liberamente consentito per scopi didattici o informativi previa citazione
della fonte
Sono possibili errori o imprecisioni, segnalatemele a [email protected]
Sistemisti Indipendenti.ORG
Sistemisti Indipendenti.ORG
http://www.sistemistiindipendenti.org
e-mail: [email protected]
?
Chi volesse integrare il presente documento, può scrivere a [email protected].
Sistemisti Indipendenti.ORG
Fly UP