Sto cercando di configurare un server con più applicazioni Web che verranno servite tutte tramite apache VirtualHost (apache in esecuzione sullo stesso server). Il mio principale vincolo è che ogni applicazione web deve usare la crittografia SSL. Dopo aver cercato su Google per un po 'e aver esaminato altre domande su StackOverflow, ho scritto la seguente configurazione per VirtualHost:
<VirtualHost 1.2.3.4:443>
ServerName host.example.org
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
SSLProxyEngine On
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / https://localhost:8443/
ProxyPassReverse / https://localhost:8443/
</VirtualHost>
Anche se https://host.example.org:8443 è accessibile, https://host.example.org non lo è, il che vanifica lo scopo della mia configurazione di host virtuale. Firefox si lamenta che, nonostante sia stato correttamente collegato al server, la connessione è stata interrotta. Ricevo anche il seguente avviso in error.log di apache:
proxy: no HTTP 0.9 request (with no host line) on incoming request and preserve host set forcing hostname to be host.example.org for uri
Nell'applicazione Web (un server Tomcat) il registro di accesso mostra una strana richiesta di accesso:
"?O^A^C / HTTP/1.1" 302
Di seguito è la richiesta di accesso corretta che ottengo quando mi collego direttamente a https://host.example.org:8443 :
"GET / HTTP/1.1" 302
Infine, dovrei anche menzionare che l'host virtuale funziona perfettamente quando non uso SSL.
Come posso farlo funzionare?
ProxyPreserveHost On
è quasi sempre sbagliato, inutile e quasi sempre si rompeProxyPassReverse
. Come nota a margineProxyRequests off
è l'impostazione predefinita, quindi ridondante.