PDA

View Full Version : JSP e IIS


Ciovo
21-09-2004, 10:40
Salve a tutti!

Volevo chiedere a qualche luminare qui presente se e come è possibile risolvere questo problema. Ho installato IIS, che mi fa da web server, sulla classica porta 80. Vorrei fare in modo che collegandomi a questa porta vengano anche visualizzate correttamente le pagine jsp. Sostanzialmente quello che NON voglio è avere due porte aperte, una con Tomcat e una con IIS. Vorrei invece che IIS chiedesse a tomcat di elaborare le pagine jsp, la passasse a IIS che poi me la fa vedere... Oppure se questo non è possibile, almeno vorrei sapere come fare a creare una pagina che tramite IIS (porta 80) non mi visualizzi (per fare un esempio) miosito.com:8080/path1 (se 8080 è la porta di tomcat), ma sempre miosito.com/path2 (sulla porta 80). Questo "semplicemente" per una questione di firewall... Non voglio sia accessibile direttamente dall'esterno, per esempio, il Tomcat, e perchè voglio avere una sola porta per il web che fa tutto (anche se sotto sotto, per i fatti suoi, delega alcune cose ad altri...).

Ringrazio in anticipo per il supporto!! Grazie!

Ciauuuuuu!

kingv
21-09-2004, 11:20
in breve:

- ti procuri (non mi ricordo se di default e' incluso in tomcat ) jk2 sul sito di tomcat e lo installi
- configuri in tomcat un connettore ajp13 che risponderà alle richiste del plugin che hai installato in IIS
- configuri IIS per ridirigere le url che desideri sul connettore tomcat
- disabiliti il connettore http in tomcat (coyote), in modo da non rendere accessibile le jps anche accedendo direttamente a tomcat, "saltando" IIS

lombardp
21-09-2004, 14:48
http://jakarta.apache.org/tomcat/tomcat-3.2-doc/tomcat-iis-howto.html

Ciovo
21-09-2004, 14:51
Scusa, ma non riesco proprio a far funzionare il tutto... ho provato e riprovato... ma non funziona.
Ho installato il JK2 (a mano, seguendo le istruzioni trovate sull'installazione, perchè lanciando install4iis.js mi da errore "Unable to find Web Server ROOT direcrory" [direcrory, proprio così!]... ma forse ora da questo errore perchè è già installato... boh!) ma non so se effettivamente con successo. Tomcat è configurato sulla porta 81, e vedo che c'è anche un'altra porta aperta da Tomcat, e cioè la 8009, quella che è configurata come porta standard per il connettore. E questo è un buon segno. Ma non riceve, non trasmette... Su IIS ho creato la cartella virtuale jakarta che punta a quella di tomcat/bin (dove c'è isapi_redirector2.dll) e ho settato che accetta l'esecuzione. Poi sul sito ho inserito fra le proprietà sotto ISAPI Filters il filtro chiamato jakarta che risulta "loaded" con priorità alta (il pulsante Enabled non è selezionabile, segno che è funzionante). Provo a caricare un qualsiasi file messo nella root di tomcat o in qualche sottocartella, e non me lo mappa, a quanto pare... ma chissà dov'è (o dove sono) gli errori!!

Se magari puoi darmi qualche suggerimento, o provare a dirmi magari un po' più passo passo come fare, magari è meglio... oppure magari se ho dimenticato qualcosa, o se c'è qualche file di configurazione che non modificato e che avrei dovuto...

Grazie mille!!!


Ciauuuu!

kingv
21-09-2004, 19:15
Originariamente inviato da lombardp
http://jakarta.apache.org/tomcat/tomcat-3.2-doc/tomcat-iis-howto.html


e' vecchia, usa tomcat 3.2 e ajp12 che ormai non e' piu' supportato.
sullo stesso sito c'e' documentazione piu' recente ;)

kingv
21-09-2004, 19:17
Originariamente inviato da Ciovo


Se magari puoi darmi qualche suggerimento, o provare a dirmi magari un po' più passo passo come fare, magari è meglio... oppure magari se ho dimenticato qualcosa, o se c'è qualche file di configurazione che non modificato e che avrei dovuto...

Grazie mille!!!


Ciauuuu!



purtroppo io l'ho sempre fatto con apache, mai con IIS (infatti ti ho scritto la procedura a grandi linee perche' non avevo idea di eventuali dettagli su IIS).

arrivi a visualizzare qualcosa nel log di tomcat?
e in quello di IIS?

Ciovo
23-09-2004, 04:02
Questo è quello che dice il log di iis:

2004-09-23 01:53:29 127.0.0.1 - 127.0.0.1 80 GET /jakarta/isapi_redirector2.dll - 500 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.0)

Tomcat invece non dice nulla...
penso ci sia un errore (mio, ovviamente) nella configurazione dei files jk2.properties, workers2.properties e server.xml

Potresti dirmi come vanno configurati questi files? Io veramente le ho provate tutte... ma non riesco ad uscirne!

Poi non riesco a capire come funziona il meccanismo [uri:] per mappare... mappi l'url o l'indirizzo che metti dopo i due punti, ma dove mappi sul webserver??


Grazie mille ancora!

kingv
23-09-2004, 09:22
se non arriva a tomcat (e se non leggi niente nei log non ci arriva) il problema e' probabilmente nel workers.proprties.

nel server.xml devi abilitare un connettore ajp13, ma dato che ha aperto la porta 8009 sicuramente l'hai fatto.

nel workers2.properties devi mappare le url che verranno ridirette verso tomcat.
nel mio ho ad esempio:

[uri:/axis/*]
info=Axis
worker=ajp13:localhost:8009
debug=1


che vuol dire che quando chiamero' apache con un url del tipo:
https://localhost/axis/happyaxis.jsp
la richiesta verrà ridiretta su tomcat

N.B. la parte che segue l'host viene mantenuta tale e quale, quindi su tomcat arriva una richiesta a /axis/happyaxis.jsp

Ciovo
23-09-2004, 13:58
Guarda, ti copio le configurazioni che ho io... secondo me dovrebbe andare... io ho seguito le indicazioni di un po' di guide su internet, però un paio erano in tedesco (e io il tedesco non lo so!), un altro po' parlavano di iis6 e versioni diverse di tomcat. Per la cronaca io uso iis5 (con win2000 server) e tomcat 5.5.2 (che usa java 1.5) e il jk2 (2.0.4).

Ecco il mio file workers2.properties :

[shm]
info=Scoreboard. Requried for reconfiguration and status with multiprocess servers.
file=anon

# Defines a load balancer named lb. Use even if you only have one machine.
[lb:lb]

# Example socket channel, override port and host.
[channel.socket:127.0.0.1:8009]
info=Ajp13 forwarding over socket
port=8009
host=127.0.0.1

# define the worker
[ajp13:127.0.0.1:8009]
channel=channel.socket:127.0.0.1:8009
group=lb

[status:]
info=Status worker, displays runtime information

[uri:/prova/*]
group=lb

[uri:/jkstatus/*]
info=The Tomcat /jkstatus handler
group=status:

[logger.file:default]
info=Konfiguration des unter workerEnv angegebenen logs fuer JK2
ver=200480501124
file=C:\Program Files\Tomcat\logs\jk2.log
level=info


Il file jk2.properties è questo:

channelSocket.port=8009

Ma potrebbe anche non averlo, credo, tanto è il settaggio standard. Basterebbe il file vuoto, a quanto sembra...



Questo invece è il file server.xml (riporto solo le cose non commentate, ovviamente):

<Server port="8005" shutdown="SHUTDOWN" debug="0">
<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"
debug="0"/>
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"
debug="0"/>

<GlobalNamingResources>
<!-- Test entry for demonstration purposes -->
<Environment name="simpleValue" type="java.lang.Integer" value="30"/>

<!-- Editable user database that can also be used by
UserDatabaseRealm to authenticate users -->
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
<Connector
port="81" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true" />
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009"
enableLookups="true" redirectPort="8443" debug="0"
useURIValidationHack="false"
protocol="AJP/1.3" />
<Engine name="Catalina" defaultHost="localhost" debug="0">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
debug="0" resourceName="UserDatabase"/>
<Host name="localhost" debug="0" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
</Host>
</Engine>
</Service>
</Server>

Che ci sia qualcosa di sbagliato nella dichiarazione/definizione nel connettore AJ3? Cosa devo mettere nella redirectPort? Quello 8443 è il valore standard, ma mi sembra un po' assurdo... ho provato sia a mettere la porta 81 in cui ho tomcat... ma niente...


Grazie mille ancora!

kingv
23-09-2004, 14:13
hai fatto un casino spaventoso :p

inizia a modificare :

[uri:/prova/*]
group=lb

con

[uri:/prova/*]
worker=ajp13:127.0.0.1:8009
debug=1

poi qui
# define the worker
[ajp13:127.0.0.1:8009]
channel=channel.socket:127.0.0.1:8009
group=lb

togli la riga con group e fai una prova

Ciovo
24-09-2004, 03:30
Niente da fare... ho provato a fare come dici tu, ma così non funziona. Il problema è che a Tomcat (o al connettore) non arriva nulla... nei log non c'è segno di raggiungimento, e neppure nel traffico monitorato dal mio firewall non c'è alcuna segnalazione di trasferimento dati... c'è solo aperta la porta 81 (tomcat) e la 8009 del connettore, ma nulla da fare... Forse è sbagliata qualche qualche altra configurazione? Cosa potrei provare... ?!

Disperazione!!!!

Grazie mille ancora!

kingv
24-09-2004, 09:18
nel worker2.properties inserisci in cima una sezione per loggare:

[logger]
level=DEBUG
logger.file=c:\jk2.log

e guarda se ti dice qualcosa

Ciovo
24-09-2004, 13:12
Niente da fare, come se non l'avessi scritto...

ti dico cosa mi dicono i due log principali, quello di tomcat jakarta_service_20040924.log:

[2004-09-24 13:04:31] [1176 prunsrv.c] [debug] Procrun log initialized
[2004-09-24 13:04:31] [info] Running Service...
[2004-09-24 13:04:31] [1028 prunsrv.c] [debug] Inside ServiceMain...
[2004-09-24 13:04:31] [info] Starting service...
[2004-09-24 13:04:32] [405 javajni.c] [debug] Jvm Option[0] -Dcatalina.home=C:\Program Files\Tomcat
[2004-09-24 13:04:32] [405 javajni.c] [debug] Jvm Option[1] -Djava.endorsed.dirs=C:\Program Files\Tomcat\common\endorsed
[2004-09-24 13:04:32] [405 javajni.c] [debug] Jvm Option[2] -Djava.io.tmpdir=C:\Program Files\Tomcat\temp
[2004-09-24 13:04:32] [405 javajni.c] [debug] Jvm Option[3] -Xrs
[2004-09-24 13:04:32] [405 javajni.c] [debug] Jvm Option[4] -Djava.class.path=C:\Program Files\Tomcat\bin\bootstrap.jar
[2004-09-24 13:04:32] [405 javajni.c] [debug] Jvm Option[5] vfprintf
[2004-09-24 13:04:34] [491 javajni.c] [debug] argv[0] = start
[2004-09-24 13:04:35] [903 prunsrv.c] [debug] Java started org/apache/catalina/startup/Bootstrap
[2004-09-24 13:04:36] [info] Service started in 4226 ms.
[2004-09-24 13:04:36] [1102 prunsrv.c] [debug] Waitning worker to finish...


e quello di standard output:

Sep 24, 2004 1:04:39 PM org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-81
Sep 24, 2004 1:04:40 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 2955 ms
Sep 24, 2004 1:04:40 PM org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
Sep 24, 2004 1:04:40 PM org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/5.5.2
Sep 24, 2004 1:04:40 PM org.apache.catalina.core.StandardHost start
INFO: XML validation disabled
Sep 24, 2004 1:04:43 PM org.apache.catalina.core.ApplicationContext log
INFO: org.apache.webapp.balancer.BalancerFilter: init(): ruleChain: [org.apache.webapp.balancer.RuleChain: [org.apache.webapp.balancer.rules.URLStringMatchRule: Target string: News / Redirect URL: http://www.cnn.com], [org.apache.webapp.balancer.rules.RequestParameterRule: Target param name: paramName / Target param value: paramValue / Redirect URL: http://www.yahoo.com], [org.apache.webapp.balancer.rules.AcceptEverythingRule: Redirect URL: http://jakarta.apache.org]]
Sep 24, 2004 1:04:44 PM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextInitialized()
Sep 24, 2004 1:04:44 PM org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextInitialized()
Sep 24, 2004 1:04:45 PM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextInitialized()
Sep 24, 2004 1:04:45 PM org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextInitialized()
Sep 24, 2004 1:04:45 PM org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-81
Sep 24, 2004 1:04:46 PM org.apache.jk.common.ChannelSocket init
INFO: JK2: ajp13 listening on /0.0.0.0:8009
Sep 24, 2004 1:04:46 PM org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=10/151 config=C:\Program Files\Tomcat\conf\jk2.properties
Sep 24, 2004 1:04:46 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 6319 ms


Lo standard error è vuoto.

Ciovo
24-09-2004, 13:13
Scusa, forse non mi sono spiegato bene... il file che doveva creare non l'ha creato!!!

Ciovo
25-09-2004, 15:19
Non so come, non so perchè... ma adesso funziona abbastanza. Ho configurato il /jkstatus nel workers2.properties così:

[uri:/jkstatus/*]
info=The Tomcat /jkstatus handler
group=status:

e mi carica tramite iis questa pagina, per cui funziona (anche con tomcat spento... tra l'altro...).
Avevo configurato un uri sulla cartella /prova, e questo ora funziona (cioè è tomcat che processa tutto, e poi passa a iis).

Questo è quello che dice la tabella all'interno del /jkstatus:

id name host uri group context inheritGlobals match_type servlet timing aliases path
0 /prova/* * /prova/* ajp13:127.0.0.1:8009 / 1 prefix null 0 null /prova/*
0 /jkstatus/* * /jkstatus/* status: / 1 prefix null 0 null /jkstatus/*
0 * * null lb:lb null 1 host null 0 null null
0 */ * / lb:lb / 1 context null 0 null /
0 /prova2/* * /prova2/* ajp13:127.0.0.1:8009 null 1 prefix null 0 null /prova2/*


Il problema è che se modifico la cartella prova in prova2 si ricorda sempre di prova, e che pur avendo tolto alcuni settaggi di logging in modalità debug (quello che mi avevi detto tu, che riempie l'event viewer nel giro di pochi minuti...) questi rimangono attivi e ancora validi, anche se disattivo tomcat (che è un servizio)... Se spengo tomcat, appunto, i settaggi restano in memoria, e li posso sempre visualizzare tramite iis scrivendo http://localhost/jkstatus ... però non posso più accedere a /prova (il che mi sembra anche ovvio). Però il problema ora è che se configuro un'altro uri non me lo da buono... forse perchè (come si vede sopra nella "tabella") /prova/* ha context / e /prova2 ha context null? Cosa potrei fare per risolvere questo problema? Posso definire più uri con uno stesso worker?
Del tipo... se scrivo

[uri:/prova/*]
worker=ajp13:127.0.0.1:8009
debug=1

posso scrivere la stessa identica cosa per prova2?

[uri:/prova2/*]
worker=ajp13:127.0.0.1:8009
debug=1

Se aggiungo la configurazione di prova2 /jkstatus se ne accorge subito anche con tomcat spento. Ma se tolgo /prova rimane sempre in memoria...


Che fare?

Grazie mille, comunque... ho fatto passi da gigante!!

kingv
25-09-2004, 16:46
non ho capito niente :cry:


naturalmente puoi definire piu' uri sullo stesso worker, ma non ho capito bene cos'e' che non ti funziona.

Ciovo
25-09-2004, 17:27
Scusa, ma a volte faccio un po' casino a spiegarmi (e non solo).

Il discorso è che, se decido di cambiare uri, il cambiamento viene rilevato ma non reso attivo, diciamo. Mi viene scritto che c'è il nuovo uri, ma non funziona. Per farlo funzionare, e per cambiare le varie configurazioni (quali ad esempio il settaggio dei log, per esempio), devo riavviare il server IIS perchè le modifiche funzionino attivamente. Sostanzialmente tutto quello che viene cambiato nella configurazione viene trovato in tempo reale, però viene reso attivo solo se riavvio IIS (il che, francamente, è molto seccante, soprattutto se devi aggiungere un uri e basta).
Ho provato a mettere più uri con un solo worker, e funziona. All'inizio avevo appunto confuso il problema con questa cosa che ho poi verificato riavviando IIS, e cioè appunto che le modifiche vengono rese attive dopo il riavvio...
Per farti un esempio: configuro che c'è l'uri:/prova/*, faccio partire IIS, cambio l'uri:/prova/* con uri:/prova2/*. Se provo ad accedere con il browser al server di iis sotto /prova funziona (anche se il settaggio modificato non lo dovrebbe più rendere accessibile), se provo /prova2 non va, come se non fosse configurato. Se però si utilizza la pagine di analisi interna /fkstatus che viene configurata di default, e che ti fa vedere statistiche, log, e i dati di accesso e successo delle richieste del connettore, questa ti mostra che ha letto il cambiamento di configurazione (nel senso che hai "aggiunto" /prova2), però non modifica la configurazione passata. Aggiunge, diciamo, ma non rendendo attivo (perchè /prova2 non funziona), e tiene buona la configurazione iniziale (perchè, anche dopo aver modificato il file di configurazione /prova è accessibile). Se si riavvia IIS succede che vede solamente /prova2, ovviamente. Però, ecco, la cosa poco soddisfacente è appunto che bisogna riavviare tutto IIS!!! E questo è abbastanza fastidioso...
Mi chiedevo se era possibile rendere aggiornabile in tempo reale il cambiamento di configurazione, e eventualmente se questo stesso tipo di problema è lo stesso anche collegandosi, per esempio, con apache!

Grazie!

kingv
25-09-2004, 20:25
lunedì faccio la prova con apache ma secondo me il comportamente che verifichi e' normale.

non riesco a capire la necessità di continuare a cambiare i mappaggi, se hai una webapp con due servlet con uri:

http://www.ciovo.it/myapp/Servlet1

e

http://www.ciovo.it/myapp/Servlet2


avrai solo un mapping per /myapp e non uno per servlet.

diciamo che generalmente ne hai uno per ogni webapplicaton che tomcat ospita.

i riavvi di IIS così facendo non dovrebbero essere frequenti.