Tomcat 7 com mod_jk

3

Estou na encruzilhada para decidir se devo usar mod_jk ou mod_proxy para configurar um sistema de balanceamento de carga com o Apache 2 e o Tomcat 7. Eu li a comparação usual de que o mod_jk é mais poderoso, mas mais difícil de configurar, etc. Eu li é um pouco datado (2007-2010) e com base no meu requisito atual eu posso ir de qualquer maneira.

Agora, veja a documentação do Tomcat 7 em conectores ! Eu vejo que eles estão essencialmente depreciando tudo, exceto mod_proxy:

Other native connectors supporting AJP may work, but are no longer supported.

Então, isso significa que novos usos devem ser feitos com o mod_proxy?

    
por Santosh 30.04.2013 / 13:39

2 respostas

3

mod_proxy é o módulo do servidor Apache HTTP, não um módulo Apache Tomcat.

O que esta página está dizendo é que o Tomcat suporta JK1.2 ou o protocolo AJP fornecido pelo módulo mod_proxy dentro do Apache HTTP.

Historicamente, o que você tinha que fazer era usar o mod_jk para fornecer suporte ao AJP1.3 para o servidor HTTP Apache, já que o Apache HTTP 2.2 agora é fornecido dentro do módulo mod_proxy - veja link que indica:

This module implements a proxy/gateway for Apache. It implements proxying capability for AJP13 (Apache JServe Protocol version 1.3), FTP, CONNECT (for SSL), HTTP/0.9, HTTP/1.0, and HTTP/1.1.

Isso oferece algumas opções:

  1. Use o conector HTTP no Tomcat e faça com que os clientes finais se conectem diretamente a isso.
  2. Use o conector HTTP no Tomcat e faça proxy por meio da funcionalidade do proxy HTTP mod_proxy HTTP.
  3. Use o conector AJP1.3 no Tomcat e faça proxy por meio da funcionalidade de proxy AJP mod_proxy do HTTP.
  4. Use o conector AJP1.2 no Tomcat e conecte-se a ele usando o módulo HTTP mod_jk AJP no Apache.

Minha recomendação seria a opção 3.

A página específica com informações sobre como configurar isso no Apache é link

    
por 30.04.2013 / 13:51
4

Ao longo dos anos, vários conectores foram desenvolvidos para permitir que o Apache httpd se comunique com o Tomcat, que usou diversos protocolos. Ao pesquisar na Web para obter informações sobre como fazer isso, não é incomum encontrar alguns conselhos realmente ruins e desatualizados. Então, primeiro de tudo, as únicas opções que você deve considerar para isso são:

  • mod_jk
  • mod_proxy_http
  • mod_proxy_ajp

Todas as outras opções não são suportadas há vários anos, portanto você deve evitar mod_jk2, mod_jserv, mod_webapp e qualquer outro módulo que não seja discutido aqui. Existem três acima de tudo, atualmente são suportados e estão todos ativamente desenvolvidos.

Minha experiência em fornecer suporte a clientes em $ work é que atualmente um cliente típico não tem mais probabilidade de acertar um bug no mod_proxy_ajp do que em mod_jk ou mod_proxy_http. (Há alguns anos o mod_proxy_ajp não era tão maduro, mas hoje em dia não vejo nenhuma diferença.)

Isso nos leva à pergunta crunch: HTTP (mod_proxy_http) ou AJP (mod_proxy_ajp ou mod_jk)? E a resposta? Depende! Ambos os protocolos têm seus pontos strongs e fracos. Qual é o certo para você dependerá de suas circunstâncias. Os fatores que normalmente afetam essa escolha são:

  • Um protocolo / módulo já está em uso?
  • A comunicação entre o httpd e o Tomcat precisa ser criptografada?
  • O httpd terminal SSL, mas as informações SSL, precisam ser transmitidas para o Tomcat?

Se você já estiver usando mod_jk, mod_proxy_http ou mod_proxy_ajp e atender a todos os seus requisitos, provavelmente não será um bom motivo para alterá-lo. Seria melhor manter o que você está usando atualmente e ter consistência nas instâncias do httpd.

Se você precisar criptografar a comunicação entre o httpd e o Tomcat, isso é significativamente mais fácil com o mod_proxy_http, já que você pode simplesmente mudar do http para o protocolo https. mod_jk e mod_proxy_ajp usam o protocolo AJP que não suporta criptografia, então você tem que implementar isso separadamente através de um túnel SSH, IPSec ou similar. Isso pode adicionar complexidade de configuração significativa ao canal de comunicação httpd-Tomcat.

Quando o httpd encerra o SSL, fornecendo os atributos SSL expostos (duas diretivas simples), mod_jk e mod_proxy_ajp transmitem automaticamente essas informações para o Tomcat e o Tomcat o disponibiliza para aplicativos da Web sem qualquer configuração adicional necessária. Para obter o mesmo resultado com o mod_proxy_http, é necessário que o httpd seja configurado para adicionar as informações do SSL como cabeçalhos http, e uma válvula precisa ser configurada no Tomcat para extrair essas informações e disponibilizá-las para os aplicativos da web. Tornar as informações SSL disponíveis para o Tomcat é, portanto, um pouco mais complicado com o mod_proxy_http.

mod_jk e mod_proxy_ * também possuem estilos de configuração muito diferentes. As diretivas mod_proxy_ * são consistentes com outras diretivas httpd, ao passo que mod_jk usa um arquivo de propriedades externo. Para administradores de sistema familiarizados com o httpd, a abordagem mod_jk pode parecer um pouco estranha.

Em resumo:

  • Se você precisar criptografar o canal httpd para o Tomcat, use mod_proxy_http
  • Se você precisar expor informações SSL ao seu aplicativo da web, use mod_jk ou mod_proxy_ajp
  • Se você já estiver usando um desses módulos, a alteração provavelmente causará mais problemas do que salva
  • Devido a uma escolha completamente livre, eu usaria mod_proxy_http apenas porque a configuração é mais consistente com outros módulos httpd, é ligeiramente mais fácil depurar com o Wireshark e pode usar seus conectores HTTP existentes no Tomcat.

Veja também uma apresentação que eu escrevi ( link ) e os comentários adicionais de Rainer Jung sobre essa apresentação ( link )

    
por 30.04.2013 / 14:41