Usuário:Nelson:Webserving01
Configurando Apache
Fazendo Rewrite com Proxy
Oque acontece neste cenario?
Voce tem um apache no IP 192.168.60.3, no qual você configura vários VirtualHost. Num dos VirtualHost que você define como www.seusite.com.br ( deve ter este nome como entrada cname ao nome dado ao Host no DNS ).
Quando o navegador buscar o nome vai cair no IP indicado pelo servidor DNS, mas na URL passada para o apache vai chegar como http://www.seusite.com.br/<sua_requisição> com isso o apache usa a configuração abaixo de VirtualHost, fazendo log nos arquivos especificados. Existe também um outro site em outro servidor com IP 192.168.90.2 com um subdiretorio /outrosite/ que deve ser apresentado como sendo de www.seusite.com.br. Estas regras de rewriting fazem este trabalho.
O Usuário final irá requisitar o site http://www.seusite.com.br/<sua_requisição>. Quando esta chega ao apache de 192.168.60.3 a requisição é re-escrita como http://192.168.90.2/outrosite/<sua_requisição> e a requisição enviada para o IP 192.168.90.2. Esta máquina responde a requisição para o IP 192.168.60.3 que por sua vez reescreve a resposta precedendo com a string http://www.seusite.com.br/ e envia a resposta ao usuário final.
Para o usuário final o servidor que responde a todas as suas requisições é o site www.seusite.com.br que está no IP 192.168.60.3 mas na verdade a máquina que faz todos os processamentos e detém o conteúdo é o servidor no IP 192.168.90.2 dentro da URI /outrosite/.
<VirtualHost 192.168.60.3> ServerAdmin webmaster@seusite.com.br DocumentRoot /home/www/htdocs/seubarra ServerName www.seusite.com.br ErrorLog /var/log/apache/seusite_error_log CustomLog /var/log/apache/seusite_access_log combined # Atencao o IP deste servidor externo deve ser permitido do iptables # Configuração testada para apache 1.3 # Modulos carregados no VirtualHost Principal <IfModule mod_proxy.c> ProxyRequests Off RewriteEngine on RewriteRule ^/outrosite$ / [R=permanent] RewriteRule (.*) to://192.168.90.2/outrosite/$1 RewriteRule ^to://([^/]+)/(.*) http://$1/$2 [E=SERVER:$1,P,L] ProxyPassReverse / http://192.168.90.2/outrosite/ </IfModule> </VirtualHost>
Mais um cenário: tenho servidor-s1 com um VirtualHost www.seuprincipal.inf.br com servidor-s2 e servidor-s3 com conteúdo web para serem mostrados como subdiretório em seu VirtualHost. http://servidor-s2/ss2/ e http://servidor-s3/ss3/ devem aparecer como http://www.seuprincipal.inf.br/ss2/ e http://www.seuprincipal.inf.br/ss3/ respectivamente.
servidor-s1 192.168.10.2
servidor-s2 192.168.20.3
servidor-s3 192.168.30.4
<VirtualHost 192.168.10.2> ServerAdmin webmaster@servidor-s2 DocumentRoot "/home/www/htdocs" ServerName www.seuprincipal.inf.br ServerAlias servidor-s1.inf.br <IfModule mod_proxy.c> ProxyRequests off RewriteEngine on RewriteLog "/var/log/apache/rewrite_seuprincipal.log" RewriteLogLevel 1 # linhas do rewrite+proxy servidor-s2 RewriteRule ^/ss2$ /ss2/ [R=permanent] RewriteRule ^/ss2/(.*) to://192.168.20.3/ss2/$1 RewriteRule ^to://([^/]+)/(.*) http://$1/$2 [E=SERVER:$1,P,L] ProxyPassReverse /ss2/ http://192.168.20.3/ss2/ # linhas do rewrite+proxy servidor-s3 RewriteRule ^/ss3$ /ss3/ [R=permanent] RewriteRule ^/ss3/(.*) to://192.168.30.4/ss3/$1 RewriteRule ^to://([^/]+)/(.*) http://$1/$2 [E=SERVER:$1,P,L] ProxyPassReverse /ss3/ http://192.168.30.4/ss3/ # mais outras se for o caso </IfModule> </VirtualHost>
Links Úteis
http://httpd.apache.org/docs/1.3/mod/index-bytype.html
http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html
http://httpd.apache.org/docs/1.3/mod/mod_proxy.html
http://httpd.apache.org/docs/1.3/misc/rewriteguide.html
http://httpd.apache.org/docs/2.0/mod/mod_proxy.html