Clique aqui para ler esse artigo em PDF.,
O melhor de dois mundos
Configurações básicas e avançadas para a integração do Servidor HTTP Apache com o Tomcat, utilizando o JK2
A popularidade do Servidor HTTP Apache é indiscutível. Segundo uma pesquisa da Netcraft, de 2003, mais de 63% dos websites são servidos por ele. O Apache é um servidor web rápido e maduro que se sobressai ao servir conteúdo estático, tais como páginas HTML e imagens, e em muitas outras áreas, como em mecanismos de autenticação, segurança via SSL e certificados, estabilidade, suporte a domínios virtuais e integração com outras ferramentas.
Por outro lado, o container web Tomcat é excelente para servir páginas dinâmicas baseadas em JSP e servlets, além de, claro, ser capaz de servir páginas estáticas. Como sabemos, o Tomcat é a implementação de referência do container para as tecnologias de servlets e JavaServer Pages. Pode operar como um servidor web independente, ou atuar como um container out-of-process para outros servidores web como o Apache ou o IIS.
Apesar de fornecer uma solução completa para JSPs e servlets, o Tomcat não pode ser considerado ideal como servidor web em um ambiente de produção. Primeiro, não é tão rápido ao servir páginas estáticas; segundo, é pouco configurável com relação a tipos de arquivos suportados ou domínios virtuais; finalmente, existem muitas empresas com grandes investimentos baseados em outras tecnologias web – por exemplo CGI, Perl, PHP – não suportadas pelo Tomcat, mas incorporadas ao Apache há anos.
Para construir aplicações web rápidas e escaláveis, os requisitos para um ambiente de produção robusto apontam para um servidor Apache que delega requisições a JSPs e servlets para um ou mais containers Tomcat. Isso pode ser feito utilizando um módulo de comunicação entre as duas partes – um conector, que é composto por um componente escrito em Java e outro em código nativo (geralmente em C/C++). O primeiro faz a comunicação do lado do Tomcat, recebendo as requisições provenientes do segundo, que se encontra no Apache.
Figura 1. Arquitetura proposta
Conectores JTC
Os conectores do subprojeto JTC (jakarta-tomcat-connectors) são pequenos módulos que fazem a comunicação entre o Apache e o Tomcat, ou entre o Tomcat e qualquer outro servidor web. Conheça um pouco mais sobre os principais conectores oferecidos pelo Tomcat:
• mod_jserv – foi o primeiro conector a surgir, originando o protocolo AJP (Apache JServ Protocol). Atualmente está obsoleto e não é mais utilizado. Um detalhe: “JServ” é o nome de um antigo projeto de container web da Apache Foundation, descontinuado em favor do Tomcat;
• webapp (mod_webapp) – originado do mod_jserv, se comunica com o servidor web através do protocolo WARP, bastante utilizado, devido à sua simplicidade e por usar um protocolo mais leve. É baseado no APR (Apache Portable Runtime), uma biblioteca escrita em C que constitui uma camada de portabilidade para comunicação, mas que é disponível apenas para o Apache, não suportando outros servidores web;
• JK (mod_jk) – desenvolvido para eliminar as limitações do mod_jserv. Suporta diversos servidores web – não apenas o Apache –, além de diversos sistemas operacionais e comunicação SSL, tudo isso através do protocolo AJP1.3;
• JK2 (mod_jk2) – é uma reestruturação completa do JK, com configuração bastante simplificada. Foi desenvolvido para o Apache 2, mas funciona bem com o 1.3. Assim como o JK, pode ser utilizado por vários servidores web como IIS, Netscape, iPlanet e Domino. Suporta HTTP e HTTPS e apresenta maior modularidade, através da separação entre as camadas de protocolo e de transporte. O conector JK2 pode ser estendido por meio de handlers para prover vários canais de comunicação, tais como sockets TCP, fast unix-sockets (tipo de socket disponível no Unix/Linux apenas para conexões locais, baseado em memória compartilhada), classes definidas pelo usuário, ou usando JNI (Java Native Interface), o que permite embutir o Tomcat em aplicações nativas. O JK2 também pode usar NIO (a nova API de entrada e saída do Java 1.4), além de ter suporte adicional ao monitoramento da comunicação entre o container e o servidor web.
Veja mais detalhes sobre os módulos nas Tabelas 1 e 2. O foco deste artigo será no conector JK2, implementando a arquitetura básica apresentada na Figura
Módulo Apache Protocolo |
... |