2013-02-08 34 views
7

In precedenza, avevo impostato correttamente Apache HTTP per inoltrare le richieste HTTP in arrivo sulla porta 80 alla mia istanza Tomcat in esecuzione sulla porta 8080. Tuttavia, ora sono in una situazione in cui devo essere in grado per eseguire il proxy delle richieste in arrivo sulla porta 80 su Tomcat @ 8080 o su un diverso processo @ 9000, a seconda dell'hostname. Di seguito è riportato un frammento del mio tentativo di installare il mio configurazione di Apache per gestire un caso del genere:Proxy HTTP Apache basato sul nome host

<VirtualHost *:80> 
    ServerName hostname1 
    ProxyPreserveHost On 
    ProxyPass/http://hostname1:8080/ 
    ProxyPassReverse/http://hostname1:8080/ 
</VirtualHost> 
<VirtualHost *:80> 
    ServerName hostname2 
    ProxyPreserveHost On 
    ProxyPass/http://hostname2:9000/ 
    ProxyPassReverse/http://hostname2:9000/ 
</VirtualHost> 

Ora quando si richiede da uno hostname1 o hostname2, ottengo un attimo 500 apparentemente a causa di mod_proxy non trovare eventuali regole di corrispondenza per delega la richiesta:

[Fri Feb 08 06:41:01 2013] [warn] proxy: No protocol handler was valid for the URL /. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule. 

Nota che Tomcat non riceve le richieste in arrivo, e quindi non di uscita registro

Per ragioni di sanità mentale, ho controllato che effettivamente possibile accedere a queste due risorse singolarmente alle rispettive porte, cioè posso accedere hostname1 usando hostname1: 8080 e hostname2 usando hostname2: 9000.

Sono mancate le cose qui per aiutarmi a configurarlo correttamente?

Inoltre, ci sono modi migliori per gestirlo in un modo forse più sano?

Grazie per qualsiasi aiuto!

+0

è il suo "hostname" pienamente qualificato? Inoltre, cosa vedi nei tuoi file di registro? C'è qualcosa che entra nei tuoi registri di tomcat? –

+0

Completamente qualificato come in "name.com" (senza "www"), sì. – jerluc

+0

Aggiunti i registri degli errori Apache sopra – jerluc

risposta

4

La risposta sembrava essere una configurazione errata riguardante un modulo separato, cioè mod_proxy_http. Sono giunto alla seguente risposta serverfault mi ha aiutato, come una soffiata dalla "delega: No gestore di protocollo era valido per l'URL" messaggio nei log degli errori HTTP Apache: https://serverfault.com/questions/242650/setting-up-a-basic-mod-proxy-virtual-host

+3

Peccato che il collegamento non vada alla risposta, che è solo "sudo a2enmod proxy_http' - in ogni caso GRAZIE! – sage

+0

@jerluc: HTML non è un protocollo, intendevi 'mod_proxy_http'? –

+1

@Andrew Sì, l'ho fatto – jerluc

1

Se si desidera configurare host virtuali basati sul nome, aggiungere la direttiva NameVirtualHost.

Aggiungi ServerName e DocumentRoot a ogni VirtualHost.

Esempio:

NameVirtualHost *:80 

<VirtualHost *:80> 
ServerName hostname1 
DocumentRoot /www/hostname1 
ProxyPreserveHost On 
ProxyPass/http://hostname1:8080/ 
ProxyPassReverse/http://hostname1:8080/ 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName hostname2 
    DocumentRoot /www/hostname2 
    ProxyPreserveHost On 
    ProxyPass/http://hostname2:9000/ 
    ProxyPassReverse/http://hostname2:9000/ 
</VirtualHost> 
+0

NameVirtualHost è già impostato su tale valore, scusami l'omissione. ServerName è anche chiaramente utilizzato nella configurazione che ho fornito. Inoltre, non vedo assolutamente alcun motivo per cui DocumentRoot abbia senso, considerando che entrambi gli host vengono configurati come proxy. – jerluc

1

Se avete in log degli errori:

Se si utilizza una versione DSO di mod_proxy, assicurarsi che i sottomoduli del proxy siano inclusi nella configurazione mediante LoadModule.

fare questo comando:

a2enmod proxy_http