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

Por Paulo Silveira em 25/09/06

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!

7 Comments »

  1. faz uma semana que fiz um post parecido com este :D
    aqui

    Comment by Urubatan — September 25, 2006 @ 10:16 pm

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

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

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

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

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

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

RSS feed for comments on this post. TrackBack URL

Leave a comment