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?
fonte
ProxyPreserveHost On
que quase sempre esteja errado, inútil e quase sempre quebreProxyPassReverse
. Como nota lateralProxyRequests off
é o padrão, portanto redundante.localhost
não estar funcionando.Experimente esta configuração
Se seu aplicativo precisar ter acesso às informações SSL da conexão em proxy, considere usar mod_proxy_ajp e o conector tomcat ajp1.3.
fonte
Mas se seu objetivo é executar vários aplicativos Web habilitados para SSL no mesmo servidor. adicionar o apache na frente não os equilibrará usando a configuração acima, você ainda precisará de um balanceador de carga ou poderá usar o módulo do balanceador de proxy do apache com algo como o seguinte:
fonte
Bem, o que eu não entendo aqui é por que você precisa ter uma conexão SSL do seu apache para o seu aplicativo que parece estar na mesma máquina ( http: // localhost: 8443 / ).
Eu acho que a maneira usual de configurar coisas assim é ter o apache fornecendo criptografia SSL para o lado do "cliente", por exemplo, internet, e ter uma conexão não criptografada com o aplicativo. Isso também oferece mais liberdade para depurar as respostas do aplicativo.
A outra coisa que Dave Cheney mencionou é usar o conector tomcat nativo para ter balanceamento de carga e outros recursos.
fonte
Você realmente precisa fazer proxy para um serviço HTTPS? Você pode querer fazer proxy para o serviço não-ssl no localhost, por exemplo
fonte
Primeiro, verificaria se você pode fazer uma solicitação de localhost para localhost: 8443 e ver se isso foi bem-sucedido (o IE faz um GET ou wget http: // localhost: 8443 )
Não sei ao certo por que o seu host virtual havin ga escuta na porta 443 e em seguida o proxy para outro host ssl
por que o aplicativo não pode usar apenas 443 nativamente? se você não pode alterá-lo, você pode simplesmente usar o iptables para redirecionar a porta
fonte
Verifique seu log de erros SSL e verifique se não há erros para não poder verificar a cadeia de certificados da CA.
fonte