Apache + Tomcat: Qual deles deve lidar com SSL? Encaminhamento de proxy baseado em IP?

1

Atualmente, temos um aplicativo Tomcat sendo executado com SSL na porta 443. Agora, temos um servidor apache que aceita solicitações http na porta 80 e redireciona para a instância do Tomcat:

<VirtualHost *:80>
    ServerName domain.com
    ServerAlias domain.com
    <LocationMatch "/">
        Redirect permanent / https://domain.com/
    </LocationMatch>
</VirtualHost>

O Tomcat está lidando com SSL, porque não há proxy, apenas um simples redirecionamento para a porta SSL:

    <Connector 
          port="443" maxThreads="200"
          scheme="https" secure="true" SSLEnabled="true"
          keystoreFile="/app/ssl/domain_com.jks" keystorePass="ourpassword"
          clientAuth="false" sslProtocol="TLS"/>

Queremos começar a usar o servidor da web apache como proxy e, além disso, redirecionamentos por IP para determinados aplicativos que devem ser usados somente por hosts em um intervalo de IPs pré-determinado. Também gostaríamos de redirecionar os IPs que não correspondem à lista pré-determinada para uma página HTML estática hospedada no servidor apache.

Minha primeira pergunta é: devo continuar a lidar com SSL no final do Tomcat, ou devo usar o apache com SSL durante o encaminhamento para uma porta "desprotegida" do tomcat?

Existe alguma maneira de redirecionar para diferentes aplicativos (e potencialmente hosts), dependendo do IP de entrada?

obrigado del

    
por delirial 04.04.2012 / 17:16

4 respostas

2

Quanto ao manuseio de SSL, esse é um caso de uso típico de descarregamento de SSL. Como você provavelmente usará um Certificado SSL (certificado para o seu nome de domínio), você terá um apache e um Tomcat. Portanto, o apache é o melhor lugar para o tratamento de SSL. A comunicação entre Apache e Tomcat deve então através de AJP e não http ou https.

Eu escrevi uma instrução passo a passo para o descarregamento de SSL, pode ser útil para você. E o link para ele: link

    
por 21.10.2012 / 21:14
1

Nós sempre usamos o Apache (ou Nginx) para proxy e "SSL offloading", como alguns chamam. Faz isso há anos em vários sistemas de produção com vários requisitos. O Apache oferece muita flexibilidade e muitos recursos que você pode aproveitar para manter a configuração do servidor de aplicativos o mais simples, fina e fácil de entender possível. Eu também recomendo usar mod_jk (ou seja, AJP) para a conexão entre o Apache e o Tomcat. O Tomcat ouve solicitações de AJP na porta 8009 por padrão.

Quanto às suas perguntas sobre redirecionamento: isso pode ser feito facilmente usando uma combinação de mod_rewrite, mod_jk e talvez algumas diretivas Location / LocationMatch em sua configuração do Apache. Depende do que exatamente você quer fazer. Precisa de mais detalhes, ou melhor, uma questão separada.

    
por 04.04.2012 / 19:19
1

Isso é possível. Eu prefiro ter o Apache como front-end para todos os servidores da web de back-end, incluindo várias versões do Tomcat (permitindo atualizações mais fáceis por cliente), o IIS e alguns appliances.

O descarregamento de SSL é descrito no link .

Em relação à questão 2 (redirecionamento seletivo):

normalmente usamos duas abordagens:

  • Todas as instâncias semelhantes de um aplicativo podem ser acessadas por trás de um URL usando um host virtual. Por exemplo, app1.invantive.com ou that-other-app.invantive.com.
  • Cada grupo de usuários obtém um URL diferente dentro desse host virtual, bem como alguma forma de dividir o DTAP. Por exemplo, app1.invantive.com/acme-corporation/production, app1.invantive.com/acme-northpole-corporation/test.

Se você usar o Apache apenas para o tráfego de roteamento, raramente precisará substituí-lo. Portanto, ele se torna um componente robusto que facilita a transferência de aplicativos e sites para novos locais e você só precisa redirecionar as regras de roteamento do Apache. Você não tem mais alterações e problemas de DNS com o TTL.

    
por 14.12.2013 / 14:48
0

Eu realmente não sou tão familiarizado com aplicativos ou arquitetura de tomcat (eu só executo alguns em minha organização), então pode haver outras maneiras de implementar implementações em larga escala; no entanto, o SSL pode ser manipulado pelo Tomcat, Apache ou transferido para um balanceador de carga e as outras coisas que você mencionou podem ser facilmente manipuladas usando mod_rewrite.

Existem alguns módulos do Apache que fazem exatamente isso (com toneladas de howto e guias na rede). Confira mod_proxy, mod_proxy_ajp ou talvez mod_jk. Você vai querer fazer alguma pesquisa para descobrir o melhor ajuste para você.

Espero que este seja um bom ponto de partida para pesquisas.

Espero que isso ajude!

    
por 04.04.2012 / 18:29