Arquivo

Archive for setembro \30\UTC 2008

Integrando Apache e JBoss rapidamente com mod_rewrite

30 de setembro de 2008 14 comentários

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

Vitimas silenciosas da Microsoft

3 de setembro de 2008 5 comentários

Existem coisas que só a Microsoft faz por você. Exemplo? Você quer comprar seus ingressos pro show da Madonna no Brasil, em dezembro? Lamento, o site está fora do ar (03/10/2008 10:16AM). Não aguentou a enxurrada de acessos. E como o Necraft não mente

Categorias:Diversos, Microsoft