Apache HTTP server e Tomcat, o HowTo fácil sem o mod_jk

Migramos 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!

13 Comentários

  1. Urubatan 25/09/2006 at 22:16 #

    faz uma semana que fiz um post parecido com este 😀
    aqui

  2. Paulo Silveira 25/09/2006 at 22:20 #

    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.

  3. Luiz Claudio 30/09/2006 at 15:34 #

    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….

  4. Diego Pires Plentz 03/10/2006 at 15:49 #

    Luiz, tutoriais existem aos montes na Internet…

    Integrating Tomcat and Apache on Red Hat Linux
    Simple Apache 2 Tomcat 5 mod_jk Integration

  5. Otávio 30/06/2007 at 15:58 #

    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

  6. Fabrício 28/04/2008 at 18:08 #

    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

  7. Paulo Silveira 28/04/2008 at 18:16 #

    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.

  8. Alexsandro 06/10/2009 at 10:22 #

    Bom dia a todos. O artigo é realmente muito bom! mas estou tendo alguns problemas: segui este tutorial em uma maquina com o fedora 9 tomcat5 e apache httpd e nao estou conseguindo manter objetos na sessao da minha aplicacao no tomcat. quando clico em qualquer link da minha pagina .jsp, é criada uma nova sessao e perco o conteudo da antiga (sei disso porque estou imprimindo o id da sessao para testar) como posso resolver este problema?
    fico no aguardo e desde ja agradeco.

  9. Robson Ramos Barreto 05/12/2009 at 16:10 #

    Prezados,

    Implementando o seguinte tutorial
    http://plentz.org/2005/11/10/webserver-em-15-minutos/

    Nao estou conseguindo colocar online acesso a projetos jee
    Mostra o erro 404. Mas localhost consegui implementar

    No momento tenho acesso externo com no-ip e virtual host no apache(WAMP). O acesso externo esta funcionando ok

    Estou com o objetivo de implementar um servidor dedicado com apache e tomcat para por em producao. Para pegar a logica de como funciona estou implementando em windows para depois em linux com este tutorial

    O autor do topico me disse que desta forma seria somente para desenvolvimento e nao em producao, e tambem que um servidor em producao seria bem diferente as configuraçoes (motivo talvez por nao estar dando certo). Estou buscando alternativas para este meu objetivo.

    Se puderes me ajudar ficarei muito Grato!

    Att.
    Robson Ramos Barreto

  10. David 03/08/2012 at 16:22 #

    Gostei muito ta explicação que vc deram sobre o o que o Alexsandro falou sobre a sessão, tem algum jeito de corrigir?

  11. Rodrigo Catto [iskigow] 18/07/2013 at 18:51 #

    O link para a lista de discussão (http://marc.theaimsgroup.com/?t=106036187700004&r=1&w=2) não está funcionando… O link agora é (http://marc.info/?t=106036187700004&r=1&w=2). Existe mais informação sobre esse ponto de servir arquivos estáticos?!

  12. Gedson Rios 20/01/2015 at 11:54 #

    Estou com uma dúvida cruel. Estou com um Apache HTTP rodando um cloud e preciso implantar um Apache Tomcat e minha dúvida é se vou enfrentar alguma incompatibilidade e como resolver isso.
    No aguardo galera.

  13. Robson Lira 12/10/2016 at 15:40 #

    Prezados boa tarde, estou encontrando dificuldades em colocar o Apache 2.4 e o Tomcat 7 no Windows, é didático o lance é que parece simples porém nunca consegui, paro, leio tento novamente e hoje no feriado tentei e nada se puderem me dar uma força ou indicar uma literatura sobre agradeço muito.

    Tenho uma aplicação na maquina 10.0.10:15 Tomcat http://localhost:8080/comercial, instalei o apache 2.4 e esta levantando sem problemas então configuro e não start mais

    LoadModule negotiation_module modules/mod_negotiation.so
    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
    LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

    BalancerMember ajp://127.0.0.1:8080 route=tomcat1 ping=1

    ProxyPass / balancer://comercial/ skickysession=JSESSIONID nofailover=On

    A configuração do Tomcat no Server.xml

    Robson Lira
    true

Deixe uma resposta