Início > Diversos, Linux > Integrando Apache e JBoss rapidamente com mod_rewrite

Integrando Apache e JBoss rapidamente com mod_rewrite

Possuo um servidor de aplicação rodando JBoss 4.04 (porta 81) com o Apache 2.2.3 em produção na mesma máquina. O Apache é o senhor da porta 80. Assim, recebi uma solicitação para registrar um DNS de mais um dos sistemas do mesmo servidor, sistema este que estava funcionando no JBoss. E, para não ficar um nome horrível (ex: http://foobar.mydomain.rootzone:81/sistema), sabia que precisaria integrar o JBoss com o Apache. Não poderia simplesmente colocar o JBoss na porta 80 e configurar um virtual-host nele pois o Apache também tem seus sistemas independentes. Imediatamente pensei no mod_rewrite, para fazer um forwardzinho da porta 80 para a 81, o que me possibilitaria um http://foobar.mydomain.rootzone transparente.

Como já tenho algumas tags de rewrite no mesmo Apache (por causa dos HTTPSs), bastou alterar a sintaxe adaptando a porta 443 para a porta 81. O virtual-host do Apache, redirecionando para o JBoss, ficou configurado da seguinte maneira:

<VirtualHost 192.168.1.1:80>
servername sistemajboss1.com.br
RewriteEngine on
RewriteCond %{SERVER_PORT} !^81$
RewriteLog “/var/log/apache2/meusistema_redirect.log”
RewriteRule ^/(.*) http://meuservidor:81/sistemajboss1/$1 [NC,L,R]
ServerSignature on
CustomLog /var/log/apache2/meusistema_access.log combined
ErrorLog /var/log/apache2/meusistema_error.log
</VirtualHost>

[ironia]
Notas:
1) O IP é fictício.
2) O nome DNS também;
3) meuservidor é o hostname.
[/ironia]

A configuração acima criou o redirecionamento e funcionou. Porém, o servidor redirecionava também o DNS para o JBoss, e a barra de endereço ficava preenchida com o endereço http://meuservidor:81/sistemajboss1. Um serviço de porco, que não faz diferença caso o uso seja doméstico, mas que fica feio apresentado ao corporativo – e é uma brecha de segurança. Googleei um pouco e não encontrei nenhuma solução que eu tenha gostado: Todas configuravam o mod_proxy ou mod_jk, que envolveriam tags desnecessárias quando eu só preciso de um simples redirect bem feito – sem falar que o mod_proxy não subia no servidor, e sem disparar nenhuma mensagem de erro¹.

Sem outra alternativa, fui a página do Apache e comecei a ler a documentação oficial do mod_rewrite, e encontrei o local onde estava errando: As flags de redirecionamento do rewrite. Apesar da documentação lida ser para o Apache 1.3, a parte que eu precisava não muda pro Apache 2.2.x. Assim, a configuração final ficou da seguinte maneira:

<VirtualHost 192.168.1.1:80>
servername sistemajboss1.com.br
RewriteEngine on
RewriteCond %{SERVER_PORT} !^81$
RewriteLog “/var/log/apache2/meusistema_redirect.log”
# RewriteRule ^/(.*) http://meuservidor:81/sistemajboss1/$1 [NC,L,R]
RewriteRule ^/(.*) http://meuservidor:81/sistemajboss1/$1 [P,NC,L,R]
ServerSignature on
CustomLog /var/log/apache2/meusistema_access.log combined
ErrorLog /var/log/apache2/meusistema_error.log
</VirtualHost>

Adicionando a tag [P] ao comando de rewrite, ele automaticamente carrega o mod_proxy² e cria o proxy do endereço solicitado, não ficando aquela coisa feia na barra de endereços e sem precisar configurar um proxy Apache na mão. As flags [NC],[L] e [R], respectivamente, desativam o case-sensitive, demarcam (trava) a última regra e efetuam o redirecionamento solcitado. E após isso, o servidor já funcionou como deveria, sem impacto na aplicação final e sem a necessidade de realizar alguma configuração no JBoss.

Stay safe!
Lucas Timm.

¹ O servidor é Debian. Pode rir agora.
² O mod_proxy precisa estar disponível, faça isso de acordo com sua distribuição.

Categorias:Diversos, Linux
  1. 2 de outubro de 2008 às 3:48 pm

    Espero que eu não tenha problemas para configurar o redirecionamento do IIS para o Tomcat, hoje lá na faculdade…

  2. Sergio Bazilio
    8 de janeiro de 2009 às 4:27 pm

    Olá,

    Estou tentando fazer o mesmo, sem sucesso, será que você consegue me dar uma ajuda?

    Quando acesso http://www.server.com, vou para meu directory root, e isto está ocorrendo OK.

    Porem queria que quando alguem entrasse em fv.servidor.com, fosse redirecionado para o jBoss.

    Estou tentando com o seguinte codigo sem sucesso, pode me ajudar?

    servername fv.domain.com

    RewriteEngine on
    RewriteLogLevel 9
    ServerSignature on

    RewriteCond %{REQUEST_URI} ^/fv/.+
    RewriteRule ^/(.*) http://fv.domain.com:8080/fv/$1 [P,NC,L,R]

    RewriteLog /etc/httpd/logs/fv_redirect.log
    CustomLog /etc/httpd/logs/fv_access.log combined
    ErrorLog /etc/httpd/logs/fv_error.logi

    vlw =)

  3. 8 de janeiro de 2009 às 5:07 pm

    Aparentemente sua RewriteCond não tá correta…

  4. Ricardo
    16 de abril de 2009 às 4:17 pm

    Boa tarde, Lucas.

    Poderia me ajudar, fiz tudo que está escrito acima, só que quando uso a tag [P]. da acesso negado. Quando removo a tag [P], fica um redirecionamento normal.

  5. 16 de abril de 2009 às 9:43 pm

    As vezes acontece, comenta as configurações do mod_proxy de acordo com sua distribuição que funciona…

  6. Ricardo
    17 de abril de 2009 às 10:55 am

    Bom dia, Lucas..

    Como faço para hospedar varios sites no apache utilizado este recurso do rewrite

  7. Ricardo
    17 de abril de 2009 às 10:57 am

    Lucas..

    Como faço para hospedar varios sites no apache utilizado este recurso do rewrite

  8. Fernando
    17 de abril de 2009 às 11:31 pm

    Boa noite….

    Parabéns pelo tutorial, estou utilizando apache + jboss e funcionou tudo ok, só que quando chamo outra pagina do meu site, ele perde a url amigavél…
    pode me ajudar.

  9. 11 de setembro de 2011 às 11:06 am

    E ae,
    Pessoal o redirecionamento para o JBoss funcionou td certo, porém quando eu entro com a url http://meudominio.com.br ele direciona para http://meudominio.com.br:8080/minhaaplicacao
    Alguém sabe como fazer para ele manter na porta 80?
    Segue a minha configuração:
    ServerName incodeworks.com.br
    ProxyPass /app ajp://dominio.com.br:8080/app
    ProxyPassReverse /app ajp://dominio.com.br:8080/app
    RewriteEngine On
    ProxyPreserveHost On
    RewriteRule ^/(.*) http://dominio.com.br:8080/app /$1 [NC,L,R]

  10. 2 de dezembro de 2014 às 1:58 pm

    Não funcionou aqui.

    • 2 de dezembro de 2014 às 8:23 pm

      Cara, mesmo relativamente desatualizado, o rewrite deve funcionar com o teu environment. Verifica com cuidado a saida de erros do Apache. Adicionalmente, verifica também a possibilidade de integrar usando o mod_proxy_ajp, que é uma saída mais “bonita” ao rewrite.

      Boa sorte!

      • 2 de dezembro de 2014 às 9:42 pm

        Usei o mod_proxy_ajp, tudo ok agora.

  11. 5 de dezembro de 2014 às 11:41 pm

    Fiz um agora ainda mais simples, usando proxypass eu roteei tudo que vinha do ServerName para o localhost:8080, assim, toda vez que uma solicitação é feita usando o DNS no informado no ServerName o apache retorna os dados do Tomcat.

  12. Jader S Farias
    15 de dezembro de 2014 às 10:02 am

    bom dia, tou com o seguinte problema, fiz o ajuste igual como foi mencionando qndo eu digito o ip do servidor ele abre a pagina da minha aplicação corretamente, porém quando eu tento logar aparece erro e não loga.
    Como foi usado o mod_proxy_ajp?

  1. No trackbacks yet.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: