sexta-feira, 24 de abril de 2009

Integrando o Tomcat com o servidor Web Apache

Introdução

Este artigo, oferece uma visão geral de alguns conceitos básicos para a realização da integração entre o Tomcat e o servidor Web Apache. Além dos conceitos, um passo a passo será mostrado para a configuração. Vale lembrar que esta configuração foi realizada em ambiente Linux / Fedora 8.
O artigo está dividido nos seguintes tópicos:
  • requisitos: indica o que é necessário para a configuração e as versões utilizadas.
  • conceitos básicos: conceitos básicos de cada item utilizado na configuração.
  • Tomcat e os Workers
  • Apache e o módulo para conexão com o Tomcat
  • Módulo para integração mod_jk
  • iniciando a configuração: passo a passo para integração entre o Tomcat e o Apache web server.
  • referências


Requisitos

Abaixo segue uma tabela com os programas utilizados
e suas respectivas versões e link para download.

Java - 6 - http://java.sun.com/javase/downloads/index.jsp
Tomcat - 6 - http://tomcat.apache.org/download-60.cgi
Apache - 2.2 - http://httpd.apache.org/download.cgi
mod_jk - 1.2.28 - http://tomcat.apache.org/connectors-doc/index.html



Conceitos básicos

Tomcat e os Workers

Um worker é uma instância do Tomcat que fica aguardando para executar servlets ou outro conteúdo que possa ser processado pelo Tomcat. Desta forma, o Apache pode enviar as solicitações para o Worker que encaminhará para o Tomcat com toda a configuração necessária.

Para uma visão completa dos workers, ver o link:
http://tomcat.apache.org/connectors-doc/reference/workers.html

Um worker é definido através de um arquivo worker.properties
e que será utilizado pelo Apache durante as requisições.
Um arquivo worker, possui propriedades no formato "Properties"
do java, ou seja, atributo = valor.

Podemos através deste arquivo definir vários workers conforme
mostrado através da diretiva abaixo:

worker.list=worker1, worker2

Esta é a estrutura básica de um arquivo worker.properties.
Em um worker deve ser definido o host onde será executada a
instância do Tomcat, uma porta onde a instância do Tomcat
irá escutar as requisições e outras propriedades como timeout,
limite para pool de conexões e etc.

O arquivo worker pode ser gravado em algum lugar onde o apache possua acesso posteriormente, pois como será visto no passo a passo para configuração, será definida uma diretiva no arquivo de configuração do apache para indicar o caminho do worker.properties.



Apache e o módulo para conexão com o Tomcat

Para a configuração, é necessária a utilização de algumas diretivas, bem como carregar o módulo de integração "mod_jk" (Veja o próximo tópico para mais detalhes). No arquivo de configuração do apache, será necessário definir o local da aplicação, o nome (ServerName) ( o mesmo nome deve possuir em seu DNS, mesmo que local [ /etc/hosts ] ), e as diretivas para o worker. Caso sua aplicação esteja em um VirtualHost, dentro da Tag de VirtualHost, deverá ser definido o que será redirecionado para o seu worker (pode ser melhor entendido no tópico de passo a passo).




Módulo para integração mod_jk

mod_jk é o módulo que permite a integração entre o Tomcat e o Apache, conectando um ao outro através de socket com o protocolo definido no arquivo workers.properties.
O mesmo deverá ser compilado e após a compilação, o arquivo mod_jk.so deve ser colocado no diretório de módulos do apache.





Iniciando a configuração

1 - instalando o Java

Para a instalação do JDK no linux, segue abaixo o link com todos os detalhes
necessários para a configuração:
http://aeloy.blogspot.com/2008/06/configurao-do-jsdk-no-linux.html


2 - instalando o Tomcat
baixar o tomcat( veja os links no tópico Requisitos ) e descompactar o mesmo
em algum diretório de preferência. Após descompactar o Tomcat, o mesmo já estará pronto para utilização. No meu caso descompactei o mesmo em

/tomcat/apache-tomcat-6.0.16/

Para facilitar a utilização do Tomcat, configure a variável de ambiente que indica a localização do Tomcat. A variável pode ser configurada no arquivo /etc/profile conforme
abaixo:

CATALINA_HOME=/tomcat/apache-tomcat-6.0.16


3 - instalando o Apache httpd web server

Para a instalação do apache no linux temos as opções de compilação e baixar os pacotes.
No meu caso utilizei o yum para instalação do httpd server.

yum install httpd
yum install httpd-devel



4 - compilando o módulo mod_jk
após baixar o arquivo tomcat-connectors-1.2.28-src.tar.gz, descompactar
o mesmo em algum diretório de preferência para iniciar a compilação.
No meu caso, costumo compilar meus programas em /usr/local/src.

[root@skynet src]# tar -xvzf tomcat-connectors-1.2.28-src.tar.gz
[root@skynet src]# cd tomcat-connectors-1.2.28-src
[root@skynet tomcat-connectors-1.2.28-src]# cd native
[root@skynet tomcat-connectors-1.2.28-src]# ./configure --with-apxs=/usr/sbin/apxs
[root@skynet tomcat-connectors-1.2.28-src]# make
[root@skynet tomcat-connectors-1.2.28-src]# make install

Após a compilação, será gerado o arquivo mod_jk.so no diretório (apache-2.0 no meu caso) /usr/local/src/tomcat-connectors-1.2.28-src/native/apache-2.0

Na opção de compilação --with-apxs=/usr/sbin/apxs, caso o seu apache tenha sido instalado através de pacotes via YUM, será necessário instalar o pacote httpd-devel.

5 - adicionar o módulo no Apache
copiar o arquivo criado durante a compilação do Tomcat Connector mod_jk para o diretório de módulos do apache conforme mostrado abaixo:

cd /usr/local/src/tomcat-connectors-1.2.28-src/native/apache-2.0
cp mod_jk.so /usr/lib/httpd/modules/.

Após adicionar o módulo no diretório de módulos do apache, é necessário realizar algumas configurações
no arquivo httpd.conf localizado em /etc/httpd/conf/httpd.conf

Adicionar a diretiva após a última ocorrência de LoadModule:
LoadModule jk_module /usr/lib/httpd/modules/mod_jk.so

O módulo já está adicionado no apache, porém a integração ainda não está sendo realizada.


6 - criar as configurações para o worker ( ver detalhes no tópico Conceitos básicos: Tomcat e os Workers )
criar o arquivo worker.properties ( pode criar em /etc/httpd/ ).
adicionar as seguintes configurações:

workers.tomcat_home=/tomcat/apache-tomcat-6.0.16
workers.java_home=/usr/java/jdk1.6.0_06
ps=/
worker.list=worker1
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.socket_timeout=120
worker.worker1.lbfactor=1

7 - Após criar o arquivo de propriedades do worker, basta referenciá-lo dentro do arquivo de configuração do
apache conforme abaixo:

vim /etc/httpd/conf/httpd.conf

adicionar a diretiva JkWorkesFile e as demais como segue abaixo:

# Where to find workers.properties
JkWorkersFile /etc/httpd/workers.properties
# Where to put jk logs
JkLogFile /var/log/httpd/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel error
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"

8 - Configurar a aplicação
Neste caso a aplicação foi distribuída em um VirtualHost.

Obs.:O deploy da aplicação foi realizada através de um arquivo .war e copiado para
o diretório webapps do meu $CATALINA_HOME.

Adicionar o seguinte VirtualHost no httpd.conf



ServerAdmin adolfo_eloy@bla.blabla.br
ServerName myapp.com
DocumentRoot /tomcat/apache-tomcat-6.0.16/webapps/myapp

# requests go to worker1 (worker definido em workers.properties)
JkMount /* worker1

# serve html, jpg and gif using httpd (estes arquivos serão fornecidos pelo apache e não pelo tomcat)
JkUnMount /*.html worker1
JkUnMount /*.jpg worker1
JkUnMount /*.gif worker1





9 - Configurar o contexto da aplicação no Tomcat

editar o arquivo /tomcat/apache-tomcat-6.0.16/conf/server.xml

Dentro da tag Engine, adicionar o elemento Host conforme abaixo:


unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">




10 - adicionar o nome no DNS local (hosts)

11 - Iniciar os serviços e testar

iniciar o tomcat: $CATALINA_HOME/bin/startup.sh
iniciar o apache: /etc/init.d/httpd start

Teste o link http://myapp.com em seu browser.


Referências

[1] The Apache Tomcat Connector - http://tomcat.apache.org/connectors-doc/index.html
[2] Apache Http Server Project - http://httpd.apache.org/
[3] Apache Tomcat 6.0 - http://www.mbaworld.com/docs/
[4] Java Sun - http://java.sun.com

Nenhum comentário:

Postar um comentário