Proxy reverso com Apache2
Autor: Jonatan Da Cunha | Publicado: 2012-08-24T05:19:00-07:00




Hospedar um site não é mais coisa de provedor de internet, muita gente tem banda larga em casa, se não tem ip fixo usa um dns dinâmico. Empresas tem links com ips disponíveis e preferem ter o controle do seu site, ou até em vez de ter apenas a hospedagem eles preferem ter o servidor dedicado para o serviço.A questão em ter o controle do servidor é também ter a responsabilidade pela segurança dos sites, além do mod_security (que abordaremos mais oportunamente) uma etapa de melhoria na segurança é colocar mais uma camada entre quem acessa e o servidor Web. Essa camada serviria para não deixar os clientes acessarem diretamente o servidor, não ter acesso aos diretórios onde estão as páginas e caso o servidor fosse atacado, apenas o proxy seria afetado mantendo o servidor principal íntegro, sem acesso externo, mas íntegro.Nosso cenário é o seguinte:Um servidor Web(podem ser mais) com todas as paginas da empresa e com os acessos de banco de dados configurados, com seus respectivos virtualhosts que atendem pelos nomes: www.cooperati.local (site principal), cursos.cooperati.local (sites com os cursos), videocasts.cooperati.local (sites dos videos). Esses sites são apenas internos e precisam ser acessados pela internet nos seguintes endereços: www.cooperati.com.br, cursos.cooperati.com.br, videocasts.cooperati.com.br. No servidor (ou servidores) web não precisa ser alterado nada em suas configurações, apenas a programação não deve fazer apenas referência a endereços de IP internos, pois isso pode causar erro no cliente ao tentar buscar IP da rede interna do servidor.No servidor Proxy devemos fazer o seguinte:Primeiro instale o Apache2:root # apt-get install apache2Habilite os módulos necessários:root # a2enmod proxy proxy_balancer proxy_connect proxy_html proxy_httpOBS: Pode ser que você não use todos os tipos de recursos fornecidos habilite os módulos mesmo assim, logo você vai querer mais recursos e eles já estão lá  .Basta agora criar os arquivos que fazem o redirecionamento dos domínios:

root # vi /etc/apache2/sites-available/www-cooperati



ProxyVia On


&lt;VirtualHost *:80&gt;
 

ServerName www.cooperati.com.br


ProxyPreserveHost On


ProxyRequests Off
 

ProxyPass / http://www.cooperati.local/


ProxyPassReverse / http://www.cooperati.local/


ProxyPass /includes http://www.cooperati.local/includes


ProxyPassReverse /includes http://www.cooperati.local/includes


Redirect Permanent / http://www.cooperati.local/


&nbsp;&lt;IfModule mod_deflate.c&gt; 
 

AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/x-javascript application/xml application/xhtml+xml "application/x-javascript \n\n" "text/html \n\n"
 DeflateCompressionLevel 9

&lt;/IfModule&gt;


&lt;/VirtualHost&gt;Onde:ProxyVia On – Habilita o proxy nesse domínioServerName – Endereço de vem na URL e que vai ser usado para proxy do endereço interno.ProxyPreserveHost – Em ON ele vai preservar o endereço do host que está fazendo o proxy e não daquele da diretiva ProxyPassProxyRequests – Em Off evita que usem seu servidor para relay de spammers ProxyPass – O endereço do site após URL (/ raiz do site), e depois em qual servidor e porta está o siteProxyPassReverse (a mesma coisa de proxy pass)Módulo deflate é usado para comprimir as páginas, ele negocia com os clientes uma compressão e envia os dados compactados gerando muito menos tráfego na rede  Depois é só criar os arquivos, seguindo o mesmo padrão para os outros domínios:

root # vi /etc/apache2/sites-available/cursos-cooperati

&nbsp;

ProxyVia On


&lt;VirtualHost *:80&gt;


ServerName cursos.cooperati.com.br
 

ProxyPreserveHost On
 

ProxyRequests Off
 

ProxyPass / http://cursos.cooperati.local/


ProxyPassReverse / http://cursos.cooperati.local/


ProxyPass /includes http://cursos.cooperati.local/includes


ProxyPassReverse /includes http://cursos.cooperati.local/includes


Redirect Permanent / http://cursos.cooperati.local/


&lt;IfModule mod_deflate.c&gt; 
 AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/x-javascript application/xml application/xhtml+xml "application/x-javascript \n\n" "text/html \n\n" 

DeflateCompressionLevel 9
 

&lt;/IfModule&gt;


&lt;/VirtualHost&gt;Agora do site dos famosos videocasts :

root # vi /etc/apache2/sites-available/videocasts-cooperati


ProxyVia On


&lt;VirtualHost *:80&gt;
 

ServerName videocasts.cooperati.com.br


ProxyPreserveHost On


ProxyRequests Off


ProxyPass / http://videocasts.cooperati.local/
 

ProxyPassReverse / http://videocasts.cooperati.local/


ProxyPass /includes http://videocasts.cooperati.local/includes


ProxyPassReverse /includes http://videocasts.cooperati.local/includes
 

Redirect Permanent / http://videocasts.cooperati.local/


&lt;IfModule mod_deflate.c&gt; 
 AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/x-javascript application/xml application/xhtml+xml "application/x-javascript \n\n" "text/html \n\n"
 

DeflateCompressionLevel 9


&lt;/IfModule&gt;


&lt;/VirtualHost&gt;Agora habilite os sites:root # a2ensite www-cooperati cursos-cooperati videocasts-cooperatiFeito isso vamos reiniciar o Apache ( poderíamos apenas fazer reload, mas como habilitamos os módulos devemos fazer o reinício do serviço):root # service apache2 restartPronto, agora basta colocar no seu browser o endereço de internet do seu site que o proxy reverso do apache fará o redirecionamento para o servidor interno.