far passare servizio tomcat attraverso apache

6 risposte [Ultimo contenuto]
Ritratto di cosmy
cosmy
(Geek)
Offline
Geek
Iscritto: 18/12/2005
Messaggi: 80

Ciao a tutti.
Ho un servizio che gira su server autonomo (basato su tomcat) che gira su porta 13000 (o qualsiasi altra a mia scelta).
Diciamo che la mia server farm non mi permette di uscire ed entrare su porte diverse dalla 80 e quindi ho bisogno di fornire il servizio attraverso apache.

Come faccio a far passare questa webapplication attraverso il webserver canonico?

O Tempora, O Mores!

Ritratto di pietro
pietro
(Collaboratore)
Offline
Collaboratore
Iscritto: 30/06/2005
Messaggi: 1123

Facilissimo, basta aggiungere la seguente configurazione sul web server Apache:

<br />ProxyPass        /webapp/ http://tomcat:13000/webapp/<br />ProxyPassReverse /webapp/ http://tomcat:13000/webapp/
dove webapp e' l'URL della tua web application su tomcat.

In questo modo tutte le richieste relative a webapp effettuate al webserver, vengono reindirizzate alla macchina tomcat. In pratica il webserver agisce da transparent proxy per l'application server; i client non si accorgono della presenza di Tomcat e vedono solo il web server. Ovviamente la tua web application deve contenere solo URL relativi e non assoluti!

Per ulteriori informazioni consulta la documentazione di Apache relativa alle direttive di ProxyPass e ProxyPassReverse. Inoltre devi abilitare il modulo mod_proxy in Apache.

Pietro

Debian. Be unique.

Ritratto di cosmy
cosmy
(Geek)
Offline
Geek
Iscritto: 18/12/2005
Messaggi: 80

molto interessante..
io già mi stavo arrovellando con mod_jk (considera che l'applicazione che devo far girare usa un tomcat riadattato che gira autonomamente.. non è un build su un server tomcat autonomo, quindi la tua soluzione casca a pennello)

O Tempora, O Mores!

Ritratto di cosmy
cosmy
(Geek)
Offline
Geek
Iscritto: 18/12/2005
Messaggi: 80

però mi becco un bell'errore all'avvio:
[error] proxy: ap_get_scoreboard_lb(0) failed in child 3847 for worker http://localhost:13000/continuum

O Tempora, O Mores!

Ritratto di pietro
pietro
(Collaboratore)
Offline
Collaboratore
Iscritto: 30/06/2005
Messaggi: 1123

A me ha sempre funzionato.....

Dove hai messo le direttive ProxyPass? Sarebbe bene metterle in un virtual host....

Hai messo lo slash (/) finale negli URL? Hai fatto partire prima Tomcat e poi Apache?

Prova a spegnere Tomcat (o a cambiare porta nel proxypass di Apache) ed usare netcat (nc) per vedere se all'application server arriverebbe qualcosa.

In pratica esegui (sull'application server):

<br />$ nc -l -p13000
e poi accedi di nuovo all'URL. Nella shell in cui hai eseguito il comando nc, compare qualcosa? Dovresti vedere la richiesta del browser che Apache ha rediretto all'application server.

Comunque dopo una breve googlata, che avresti potuto fare anche tu, risulterebbe un bug che potrebbe essere analogo al tuo problema. Che versione di Apache usi? Io l'ho appena provato sul 2.2.8 di Lenny e funziona.

Pietro

Debian. Be unique.

Ritratto di cosmy
cosmy
(Geek)
Offline
Geek
Iscritto: 18/12/2005
Messaggi: 80

il problema in questione era legato ad un modulo che non avevo attivato (credevo fosse solo proxy_http invece c'è anche proxy).

ora però ha un problema di permessi. Questo l'error.log
[error] [client 192.168.1.137] client denied by server configuration: proxy:http://localhost:13000/continuum/

in effetti se cerco su google sono in diversi ad averlo e penso sia un problema di configurazione.
Questa la porzione del mio virtualhost:

        <br />ProxyPass /continuum/ http://localhost:13000/continuum/<br />ProxyPassReverse /continuum/ http://localhost:13000/continuum/<br />        &lt;Directory proxy:http://localhost:13000/continuum/ &gt;<br />                        Order Allow,Deny<br />                        Allow from all<br />        &lt;/Directory&gt;<br />

se provo a mettermi in in ascolto sulla 13000 come hai suggerito te connettendomi all'indirizzo non mi arriva nulla.. il che aumenta i miei sospetti che sia apache stesso a bloccare le chiamate.
Sto cercando di capire quale direttiva potrebbe essere..

Ah il browser mi da una 403 e dice:
Forbidden
You don't have permission to access /continuum/ on this server.

Ah, uso apache 2.2.3

___________
AGGIORNAMENTO

smanettando un po' sul proxy.conf ho notato che la direttiva che da 'noia' è Deny from all..
se la disattivo però non vorrei diventare un open proxy per chiunque...

O Tempora, O Mores!

Ritratto di InDaClub
InDaClub
(Junior)
Offline
Junior
Iscritto: 08/03/2007
Messaggi: 12

Io lo configuro spesso per lavoro sia per tomcat che per jboss e uso sempre il mod_jk .
In tomcat dentro a server.xml o web.xml (ora a memoria non ricordo bene) devi decommentare la parte relativa al connettore ajp13 e configurare il workers,properties con la porta del connettore ajp13 , il worker.
Poi con una rewrite rule in apache fai fare riscrivere il dominio www.pippo.it in www.pippo.it/directory
e aggiungi JKMount /directory nomeworker.
Il concetto è bene o male questo. non è complesso , per eventuali altre info specifiche contattami pure , ti spiegherò meglio se vuoi Wink