Tomcat com URL limpa

Olá pessoal. Recentemente tive uma questão, relativamente simples mas que deu muito trabalho para resolver: fazer os sites em PHP e as aplicações em Java responderem com URL limpa, sem aquele ":8080".

[ Hits: 14.891 ]

Por: fernando freitas do vale em 11/06/2013


Introdução



Seguinte cenário:

Tenho um servidor web Apache PHP respondendo na porta 80, com alguns virtual hosts rodando tudo tranquilo. Porém, surgiu a necessidade de um servidor web Apache Tomcat responder com URL limpa.

A maneira a seguir é só uma maneira que encontrei, não estou aqui para justificar se é a melhor maneira ou a mais correta, só posso dizer que comigo resolveu.

Configurações do Apache 2 PHP

Vamos mexer em dois arquivos de configurações, no 000-default do Apache e no server.xml do Tomcat, partindo do ponto que você já tenha o cenário rodando: o Apache 2 PHP e o Apache Tomcat 6 (acredito que no Tomcat 7 também se aplica).

Vamos aos arquivos de configuração tomando como premissa que você está como superusuário:

# vim /etc/apache2/sites-enabled/000-default

Iremos criar o seguinte bloco dentro do conf:

<VirtualHost ipdositenodns:80>
 ServerName ipdodns
 ServerAlias exemplo.com.br
 ProxyPass / http://exemplo.com.br:8080/
 ProxyPassReverse / http://exemplo.com.br:8080/
</VirtualHost>

Explicando linha por linha do bloco acima, afinal é bom saber o que você está fazendo por tratar-se de servidor:
  • <VirtualHost ipdositenodns:80> :: nessa linha estamos abrindo a tag do virtual host e definindo o IP que o Apache irá responder, no caso o IP do site exemplo.com.br dentro do seu DNS. Caso você não tenha um IP disponível em termos de placa física basta criar um IP virtual dentro do GNU/Linux. Não iremos abordar isso aqui mas qualquer dúvida estamos aí.
  • ServerName ipdodns :: acredito que aí é bem claro, o IP do seu DNS.
  • ServerAlias exemplo.com.br :: aqui será onde iremos definir a URL que irá responder, exemplo.meudominio.com.br
  • ProxyPass / http://exemplo.com.br:8080/ e ProxyPassReverse / http://exemplo.com.br:8080/ :: essas duas linhas é que vão fazer o encaminhamento da requisição pro Tomcat (pelo menos no meu entender).
  • </VirtualHost> :: fechando a tag do virtual host.

Configuração do Tomcat 6

Agora vamos ao server.xml referente ao Tomcat, antes realize um backup do arquivo que lá na frente pode ser importante:

# cp /var/lib/tomcat6/conf/server.xml /var/lib/tomcat6/conf/serverbackup.xml

Obs.: fazer isso com todo XML ou conf que for alterar.

# vim /var/lib/tomcat6/conf/server.xml

Vamos procurar pela tag <Engine name="Catalina" defaulthost="localhost">

Depois dessa tag vamos procurar a seguinte tag:

<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false"/>

Abaixo dessa tag vamos adicionar o hostname do nosso exemplo:

<Host name="exemplo.com.br" appBase="webapps/exemplo"
           unpackWARs="true" autoDeploy="true"
           xmlValidation="false" xmlNamespaceAware="false"/>

Nessa tag na primeira linha definimos como no Tomcat a URL lá no serveralias, ou o nome que ela terá que responder e em appBase definimos a pasta base do aplicativo, no meu caso todas ficam dentro do webapps.

Saímos e salvamos.

Depois que saímos vamos criar a estrutura das pastas:

# mkdir /var/lib/tomcat6/webapps/exemplo

Após criarmos a pasta base criamos a pasta ROOT onde será colocado a aplicação em si, onde será gerado os deploys da aplicação:

# mkdir /var/lib/tomcat6/webapps/exemplo/ROOT

Depois que criamos a estrutura vamos criar a pasta dentro do Catalina:

# mkdir /var/lib/tomcat6/conf/Catalina/exemplo.com.br

Em seguida copiamos os arquivos ROOT.xml e manager.xml da pasta localhost em /var/lib/tomcat6/conf/Catalina/localhost para a pasta do exemplo /var/lib/tomcat6/conf/Catalina/exemplo:

# cp /var/lib/tomcat6/conf/Catalina/localhost/ROOT.xml /var/lib/tomcat6/conf/Catalina/exemplo/ROOT.xml
# cp /var/lib/tomcat6/conf/Catalina/localhost/manager.xml /var/lib/tomcat6/conf/Catalina/exemplo/manager.xml


Agora vamos editar o arquivo ROOT.xml dentro de /exemplo:

# vim /var/lib/tomcat6/conf/Catalina/exemplo/ROOT.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/" reloadable="true" docBase="webapps/exemplo" workdir="webapps/exemplo" >
    <Resource driverClassName="org.postgresql.Driver" maxActive="80" maxIdle="30" maxWait="5000" name="jdbc/SigaDS" password="senha" type="javax.sql.DataSource" url="jdbc:postgresql://ipdobanco:5432/nomedobanco" username="usuario"/>
</Context>

No caso do meu ROOT.xml eu defino o docbase e o workdir para onde fica a aplicação "webapps/exemplo" e depois tem a conexão com o banco de dados da aplicação.

O manager não precisa ser alterado, no meu caso criei um arquivo do ROOT.xml com o nome da aplicação exemplo.xml, não sei dizer com certeza se faz alguma diferença ou qual dos dois é usado (eu acredito que seja o exemplo.xml mas não testei) mas é bom prevenir.

# cp /var/lib/tomcat6/conf/Catalina/exemplo/ROOT.xml /var/lib/tomcat6/conf/Catalina/exemplo/exemplo.xml

Conclusão

Agora para finalizarmos basta reiniciar os serviços:

# service apache2 restart

Prefiro o restart ao reload mas aí é preferência de cada um.

# service tomcat6 restart

No caso do Tomcat 6, qualquer probleminha nos arquivos XML não vai deixar o Tomcat subir, por isso, antes de mais nada, é sempre bom manter backup dos arquivos XML para o caso de não se lembrar onde alterou e poder recomeçar as configurações.

Para qualquer dúvida a respeito dessa configuração estou a disposição, não vou entrar em questões de méritos da solução se é a melhor ou a pior, só posso dizer que resolveu o meu problema.

Fernando Freitas do Vale
f.freitasdovale[at]gmail.com - Talk

Abraços.

   

Páginas do artigo
   1. Introdução
Outros artigos deste autor

Servidor de Banco de Dados + Servidor Web PHP

Leitura recomendada

Failover de Internet

Como hospedar um site no seu próprio micro

Internet no Linux através de celular HTC TYTN II

aMSN com fontes bonitas

SFTP Server com SSH, Chroot e Rsyslog

  
Comentários
[1] Comentário enviado por maikonalmeida em 21/06/2013 - 16:41h


Poderia utilizar o iptables, tudo que chegar na porta 80 redirecionar para porta que você precisa 8080

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

[2] Comentário enviado por fernandovale em 21/06/2013 - 16:47h

Da uma olhada no cenário,

Eu tenho um apache rodando na porta 80 e um tomcat rodando na 8080, se eu colocar uma regra de redirecionamento da porta 80 para a 8080 as paginas que estão em php não receberão requisição.

é só olhar o ambiente descrito.

[3] Comentário enviado por cROMADO em 25/06/2013 - 22:39h

Não precisou informar a porta do proxy no Tomcat?. conforme o link abaixo.
http://tomcat.apache.org/tomcat-6.0-doc/proxy-howto.html#Apache_2.0_Proxy_Support

Configure your copy of Tomcat 6 to include a special <Connector> element, with appropriate proxy settings, for example:
<Connector port="8081" ...
proxyName="www.mycompany.com"
proxyPort="80"/>

[4] Comentário enviado por fernandovale em 26/06/2013 - 11:56h

Nesse caso do seu link o proxy eh feito no Apache Tomcat.

O proxy realizado no meu ambiente é no Apache2, onde estão hospedadas as páginas php, a requisição chega na porta 80 onde estão as páginas php e o próprio Apache2 faz um proxy de acordo com o endereço para o tomcat.

[5] Comentário enviado por murilobilia em 23/07/2013 - 10:58h

Cara, dá para instalar e configurar o mod_jk no Apache: http://tomcat.apache.org/connectors-doc/

[6] Comentário enviado por fernandovale em 23/07/2013 - 11:17h

murilobilia,

Cara muito boa sua dica, dei uma pesquisada rápida e aparentemente também resolve a questão, o problema que na época que fiz a pesquisa para a configuração não achei nada referente a esse modulo, mas fica a dica para quem for configurar daqui pra frente, eu mesmo vou testar assim que tiver tempo e coloco aqui um artigo de configuração ou algo parecido.

O importante foi o que citei no inicio do artigo, na época resolveu o problema que eu estava enfrentando, e como não achei muito material referente a isso achei válido a postagem.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts