Estou tentando configurar um servidor com vários aplicativos da web que serão servidos por meio do apache VirtualHost (apache em execução no mesmo servidor). Minha principal restrição é que cada aplicativo Web deve usar criptografia SSL. Depois de pesquisar um pouco e examinar outras questões sobre o stackoverflow, escrevi a seguinte configuração para o 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>
Embora https://host.example.org:8443 esteja acessível, https://host.example.org não é, o que anula o objetivo da minha configuração de host virtual. O Firefox reclama que, apesar de ter se conectado com sucesso ao servidor, a conexão foi interrompida. Também recebo o seguinte aviso no error.log do 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
No aplicativo Web (um servidor Tomcat), o log de acesso mostra uma solicitação de acesso estranha:
"?O^A^C / HTTP/1.1" 302
A seguir, é apresentado o pedido de acesso correto que recebo quando me conecto diretamente a https://host.example.org:8443 :
"GET / HTTP/1.1" 302
Por fim, devo mencionar também que o host virtual funciona perfeitamente quando não uso SSL.
Como posso fazer isso funcionar?
ProxyPreserveHost On
que quase sempre esteja errado, inútil e quase sempre quebreProxyPassReverse
. Como nota lateralProxyRequests off
é o padrão, portanto redundante.