Como configurar o mod_proxy para o ProxyPass com base em http vs https?

9

Eu tenho o Apache Tomcat executando com SSL ativado. Eu tenho o Apache HTTP Server agindo como um proxy reverso, portanto, se os usuários clicarem em http: // myserver / tomcat /, eles serão passados ​​para http: // myserver: 8080 .

ProxyPass /tomcat/ http://myserver:8080/
ProxyPassReverse /tomcat/ http://myserver:8080/

Eu tenho o servidor HTTP Apache configurado para SSL também; assim, quando os usuários clicam em https: // myserver / tomcat /, eles devem ser passados ​​para https: // myserver: 8443 / .

Com a configuração atual do ProxyPass & ProxyPassReverse, eles serão redirecionados para o URL não-ssl. Como posso configurar o passe de proxy para que ele seja redirecionado para um protocolo e uma porta diferentes com base na solicitação recebida?

Ou seja, se alguém entrar via HTTPS, como redirecioná-lo para o meu tomcat @ https: // myserver: 8443 ?


Atualizar:

@ mike-insch

Eu tentei:

NameVirtualHost *:443

<VirtualHost *:80>
    ProxyPass /tomcat/ http://myserver:8080/
    ProxyPassReverse /tomcat/ http://myserver:8080/
</VirtualHost>

<VirtualHost *:443>
    ProxyPass /tomcat/ https://myserver:8443/
    ProxyPassReverse /tomcat/ https://myserver:8443/
</VirtualHost>

Agora, quando visito: https: // myserver / tomcat / recebo "página não encontrada". No log de erros, vejo "O arquivo não existe: / var / apache2 / htdocs / tomcat"

O que está correto, mas esperava que a solicitação fosse roteada para o tomcat em https: // myserver: 8443 / .

Acho que preciso olhar mais para os hosts virtuais, a menos que algo pareça terrivelmente errado.

codecraig
fonte
Eu não acho que você precise da NameVirtualHostdiretiva aqui. Além disso, você precisará adicionar as diretrizes apropriadas para ativar o SSL dentro da sua <VirtualHost *:443>seção.
Mike Insch

Respostas:

5

Você precisa fazer isso por meio de duas <VirtualHost *:X>diretivas independentes . Suas HTTPdiretivas vão para dentro <VirtualHost *:80>enquanto suas HTTPSdiretivas vão para dentro <VirtualHost *:443>. Ajuste conforme necessário, se o servidor tiver vários hosts virtuais baseados em endereço ou baseados em nome configurados. Consulte a documentação do Apache 2 para obter detalhes completos.

Mike Insch
fonte
Então eu adicionei o seguinte: NameVirtualHost *: 443
codecraig
3
Não se esqueça de adicionar o SSLProxyEngine na directiva
Ryan
6

Para ser completo: se for uma opção, é uma boa ideia encerrar o SSL no Apache, em vez de o Tomcat também lidar com isso. Desde que o Tomcat seja acessível apenas no Apache, isso é mais simples e não menos seguro.

Nesta configuração, o Apache procuraria proxy HTTP e HTTPS para http://myserver:8080/:

NameVirtualHost *:443

<VirtualHost *:80>
    ProxyPass /tomcat/ http://myserver:8080/
    ProxyPassReverse /tomcat/ http://myserver:8080/
</VirtualHost>

<VirtualHost *:443>
    ProxyPass /tomcat/ http://myserver:8080/
    ProxyPassReverse /tomcat/ http://myserver:8080/
</VirtualHost>
David Carboni
fonte
1
Se fizer isso, não será necessário repetir as diretivas de proxy nos dois VirtualHosts. Você pode simplesmente puxá-los para o contexto do servidor.
Amit Naidu