Apache HTTP server e Tomcat, o HowTo fácil sem o mod_jk
Por Paulo Silveira em 25/09/06Migramos os nossos sitemas do servidor compartilhado da locaweb para um servidor dedicado, porém enfrentamos o clássico problema: responder php e java na mesma porta de acordo coma URL. O nosso blog é gerenciado pelo wordpress, que precisa do PHP, já os nossos outros serviços precisam de Java 5 e tomcat 5.5.
Eu e o Guilherme Moreira somos apenas usuários comuns do linux, sem conhecimentos avançados. Para piorar estamos acostumados com o debian, e o servidor novo é um fedora. Tentamos fugir do apache http server (daqui em diante referido apenas como apache) e mais ainda do mod_jk.
A vantagem de usar o mod_jk é que o apache poderia servir o conteúdo estático das nossas web applications, mas já sabemos a algum tempo que o tomcat e o apache têm performance muito parecida quando estão servindo arquivos estáticos (htmls e imagens, por exemplo).
Corremos então atrás de alternativas mais simples, no meio do caminho encontramos soluções estranhas que não gostamos, e a melhor a que chegamos foi usar o mod_proxy.
Vamos então a um tutorial bem sucinto para essa instalação em qualquer distribuição linux, omitindo qualquer detalhe sobre descompactação e download de arquivos básicos. Caso você queira instalar tudo isso no windows, só que com o mod_jk, você pode acessar o excelente howto de 15 minutos que o Diego Plentz criou.
Baixe os fontes do Apache 2.2 e configure o build com o que precisamos (mod_rewrite para o wordpress):
./configure—prefix=/usr/local/apache —enable-rewrite \ —enable-shared=max \
—enable-so \
—enable-proxy
Você poderia adicionar outros módulos. Agora basta o make e o make install.
Vamos ao PHP, baixe o fonte e configure o build:
./configure—prefix=/usr/local \
—enable-xslt \
—with-apxs2=/usr/local/apache/bin/apxs \
—with-mysql=/usr/bin/mysql_config
make e o make install aqui também.
Pronto. Considere que o diretório /var/www/blog.caelum.com.br possui o nosso wordpress. No seu /usr/local/apache/conf (ou diretório similar) edite o httpd.conf e permita o acesso aos arquivos do diretório do wordpress:
<Directory /var/www/blog.caelum.com.br>
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
Crie a associação de blog.caelum.com.br para o diretório /var/www/blog.caelum.com.br:
<VirtualHost *:80> ServerName blog.caelum.com.br DocumentRoot /var/www/blog.caelum.com.br </VirtualHost>
Já, os outros sites que você quiser que sejam servidor pelo tomcat, você vai configurar o apache para agir como proxy, e delegar todas as requisições, e configuramos também para que ele tome o cuidado de reescrever alguns headers para que, por exemplo, não volte uma resposta com redirect para uma URL na porta 8080:
<VirtualHost *:80> ServerName www.caelum.com.br ServerAlias caelum.com.br www.caelum.com.br ProxyPass / http://caelum.com.br:8080/ ProxyPassReverse / http://caelum.com.br:8080/ </VirtualHost>
Aí no seu server.xml do tomcat, basta direcionar o host caelum.com.br:
<Host name="caelum.com.br" appBase="/xxx/yyy/webapps/caelum.com.br" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Alias>www.caelum.com.br</Alias> </Host>
Pronto! Muito simples para até para que é apenas usuário do linux. E bem mais fácil que com o mod_jk! Agora tudo parece estar rodando corretamente, com apenas um probleminha ou outro. Fica aí a receita de bolo para quem precisar, qualquer sugestão é muito bem vinda!
faz uma semana que fiz um post parecido com este
aqui
Comment by Urubatan — September 25, 2006 @ 10:16 pm
brincadeira! boa urubatan… agora poe tambem o ProxyPassreverse se não voce vai ter problemas com redirects e outras coisas que passam URLs nos cabecalhos http…
Eu ja vi tambem que o mod_proxy do 2.2 agora tem opções para voce configurar o pool dele de conexoes com o servidor de baixo.
Comment by Paulo Silveira — September 25, 2006 @ 10:20 pm
Então, legal o texto, eu nunca consegui instalar nem o mod_jk
acho que isso pode ser uma alternativa, mas agora tô com um problema mais básico, num consigo instalar o jdk da sun no Red Rat enterprise 3, alguém indica um tutorial….
Comment by Luiz Claudio — September 30, 2006 @ 3:34 pm
Luiz, tutoriais existem aos montes na Internet…
Integrating Tomcat and Apache on Red Hat Linux
Simple Apache 2 Tomcat 5 mod_jk Integration
Comment by Diego Pires Plentz — October 3, 2006 @ 3:49 pm
A idéia é simples e excelente, porém usando proxy perdemos o IP de quem está acessando. No meu caso tanto o tomcat como o apache ficam na mesma maquina, então aparece como sendo sempre o localhost conectado.
Abs
Comment by Otávio — June 30, 2007 @ 3:58 pm
Muito bom o tuturial, mas agora eu estou precisando de 2 Tomcat na mesma máquina, o 4 e 5, e não tô conseguindo usar os dois. Como devo fazer?
Abraços
Comment by Fabrício — April 28, 2008 @ 6:08 pm
Oi Fabricio. Da pra usar tranquilamento, so cuidado com o uso das portas no server.xml para nao dar conflito e ele nao reclamar de JVM: port already bind.
Acho que esse artigo mereceria uma atualizacao: tivemos alguns problemas de performance com mod proxy e no final acabamos mudando para o velho mod JK.
Comment by Paulo Silveira — April 28, 2008 @ 6:16 pm