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.