Salve galera,
Uma situação muito comum para quem desenvolve aplicações que executam em um container java, como Glassfish ou Tomcat, é a necessidade de "mascarar" a porta do container atrás de um servidor web tradicional. Vou tentar explicar melhor.
Normalmente, subimos nosso container em uma porta diferente da 80, que é a porta web padrão, como por exemplo na porta 8080. Então para o usuário acessar nossa aplicação, ele precisa conectar em http://www.minhaempresa.com.br:8080/MinhaAplicacaoJava. Isso pode gerar alguns problemas, como o usuário não fixar a url do sistema, ou se confundir na hora da digitação, além de se tornar menos profissional, ao meu ver.
O objetivo proposto no artigo, é poder acessar a aplicação no seguinte endereço:
http://www.minhaempresa.com.br/MinhaAplicacaoJava. Sendo que teremos um servidor web apache rodando na porta 80 e um servidor java Glassfish rodando na porta 8080.
Depois de pesquisar um pouco, percebi que a maneira mais simples e transparente para atingir o objetivo, era instalar um módulo no servidor apache para tal funcionalidade. O nome do módulo é mod_jk.
Vamos a instalação
Ambiente ondo foi implementado:
- Glassfish 3.1.2.2 (build 5).
- CentOS Linux release 6.0 (Final)
- Java 7 build 1.7.0_01-b08
- Apache 2.2.15
- Tomcat Connectors 1.2.37
A única dependência que tive que instalar no linux foram
gcc-c++ e
httpd-devel, pois deu problema na compilação do conector. Caso você tenha o mesmo problema, aqui mostro como instalar no Centos:
$ yum install gcc gcc-c++ autoconf automake
$ yum -y install httpd-devel
Ubuntu
$ sudo apt-get install libapache2-mod-jk
Para fazer o processo no ubuntu, você pode acessar:
http://recklessdeveloper.blogspot.com.br/2011/06/apache-e-glassfish-301-com-modjk-no.html
O conector você pode baixar em:
http://tomcat.apache.org/connectors-doc/. Como eu baixei o source, então tive que compilar. A complilação é bem simples. Você deve descompactar os fontes do mod_jk, entrar na pasta e executar os seguintes comandos:
cd native/
$ ./configure --with-apxs=/usr/sbin/apxs
$ make
$ make install
Após a compilação e instalação, você deve criar o arquivo de configuração. No meu caso, ele foi criado em:
$ /etc/httpd/conf/workers.properties
Esse arquivo deve ter o seguinte conteúdo:
worker.list=worker1
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
Observação: Essa porta não precisa estar liberada externamente caso os dois servidors estejam rodando na mesma maquina.
Agora devemos configurar o httpd.conf:
LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkLogFile /var/log/mod_jk.log
JkLogLevel debug
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
JKMount /MinhaAplicacaoJava/* worker1
Em
JkWorkersFile configuramos o arquivo criado anteriormente.
Em
JKMount configuramos o contexto da nossa aplicação no Glassfish. Você pode adicionar varios pontos de montagem, um para cada aplicação.
Agora precisamos avisar o Glassfish que ele vai ouvir as requisições desse cara.
Entre na pasta bin do Glassfish e execute os seguintes comandos:
$ ./asadmin create-http-listener --listenerport 8009 --listeneraddress 0.0.0.0 --defaultvs server jk-connector
$ ./asadmin set configs.config.server-config.network-config.network-listeners.network-listener.jk-connector.jk-enabled=true
$ .asadmin create-jvm-options -Dcom.sun.enterprise.web.connector.enableJK.propertyFile=domain-dir=/etc/httpd/conf/workers.properties
E pronto. Agora reinicie o Apache e o Glassfish e pode testar. Caso não funcione, verifique o arquivo de logs gerado em
/var/log/mod_jk.log.
Até a próxima! vlw