Inicial > Apache > Proxy reverso com Apache

Proxy reverso com Apache

Muita gente enxerga o proxy apenas como um servidor que intermedia as requisições entre a rede local e a internet, fazendo cache de páginas e controle de acesso. Sem dúvidas, o serviço mais conhecido e utilizado para este fim é o Squid (http://www.squid-cache.org/). Mas o Proxy tem outra característica/função, pouco conhecida mas muito útil: o Proxy Reverso.

Proxy Web x Proxy Reverso

O Proxy Web corresponde à ‘função’ conhecida pela maioria das pessoas. Nesta configuração, o proxy tem a função de compartilhar a internet com a rede local, receber as requisições feitas pelos clientes e buscar o que foi solicitado nos servidores Web. Além disso, o Proxy oferece mais algumas vantagens a um administrador de redes, como:

  • Controle de acesso: O acesso à internet pode ser controlado com base no horário, endereço IP do cliente, login e sites com conteúdo indesejado;
  • Cache de páginas: o Proxy guarda informações das páginas acessadas. Quando alguém acessa um endereço, o servidor procura primeiro nos seus arquivos armazenados, caso já possua a página, não precisa buscá-la novamente. O que acaba tornando a navegação mais rápida e evitando acessos desnecessários à Web;
  • Relatórios de acesso: Todos os logs de acesso são armazenados, o que permite que possam ser criados relatórios dos acessos realizados pelos clientes através do servidor;

O Proxy Web possui tanto função de servidor quanto de cliente. É servidor quando possui os objetos solicitados pelos navegadores e lhe envia as respostas. É cliente quando não possui algum objeto solicitado e precisa requisitá-lo ao servidor Web. Os proxies vêm sendo muito usados nas empresas, com o intuito de acelerar o acesso à Internet e evitar investimentos em ampliação de largura de banda.

O Proxy Reverso é um servidor instalado entre a internet e os servidores Web internos de uma empresa. As requisições externas, são direcionadas a um servidor interno por meio de um roteamento feito pelo Proxy Reverso. Dessa forma, ele é a única interface para as requisições externas.

Imagine a situação: Sua empresa possui o domínio xyz.com.br registrado, seu site (www.xyz.com.br) está em um servidor dentro da sua rede e, além do portal há outras aplicações que precisam ser disponibilizadas externamente. Para cada aplicação é necessário possuir um domínio ou subdomínio registrados? Não! Neste caso, pode ser usado o Proxy Reverso. Como?! É o que vou explicar daqui a pouco.

Além do roteamento de requisições externas, são vantagens do Proxy Reverso:

  • Segurança: Como o Proxy é a única interface externa da rede, ele “esconde” os demais servidores;
  • Criptografia: a criptografia SSL pode ser delegada o Proxy ao invés dos servidores internos;
  • Balanceamento de carga: o servidor pode distribuir a carga para vários servidores da rede;
  • Cache: assim como o Web Proxy, o Proxy Reverso pode manter em cache o conteúdo estático das requisições realizadas, ajudando assim a diminuir a carga dos servidores Web.
  • Compressão: o Proxy Reverso pode tornar o acesso mais rápido através da compressão do conteúdo acessado;

Configuração do Proxy Reverso

Além do Proxy Web, o Squid também pode se comportar como Proxy Reverso, mas neste artigo, teremos como base o Apache 2.2 para esta função. As configurações apresentadas funcionam tanto no Windows quanto no Linux. Então, vamos colocar as mãos na massa…
No arquivo de configuração do Apache, vamos fazer as seguintes alterações:
Nota: no linux geralmente o httpd.conf está nos diretórios /etc/http/conf  ou  /usr/local/http/conf , dependendo da distro utilizada.
    • Habilitar os módulos do Proxy. Para isso, descomente as linhas:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
    • Incluir vhosts na configuração. Para isso acrescente ou descomente a linha abaixo:

Nota: Os vhosts podem ser configurados no httpd.conf, optei pelo uso de um arquivo separado para organizar melhor o servidor.
Nota2:
 Os vhosts não são necessários na configuração do Proxy Reverso. São utilizados quando há mais de um nome para o mesmo servidor, e cada nome será direcionado para uma aplicação diferente.

Include conf/extra/httpd-vhosts.conf
    • Incluir o arquivo de mod-proxy. Para isso acrescente ou descomente a linha abaixo:
Include conf/extra/mod_proxy.conf

Nota: Caso os dois arquivos citados acima não existam no servidor, os mesmos devem ser criados.

Para fazer o roteamento das requisições direcionadas aos servidores internos é utilizado o ProxyPass, a sintaxe é simples, basicamente temos a estrutura:

ProxyPass                /destino       http://servidor.da.app:porta/destino
ProxyPassReverse         /destino       http://servidor.da.app:porta/destino

Para trabalhar com vhosts, crie ou edite o arquivo conf/extra/httpd-vhosts.conf e crie os vhosts com as seguintes configurações:

Nota: Sempre o contexto informado deve ser igual ao contexto da aplicação.
Nota2: Todos os diretórios referenciados pela aplicação no servidor de hospedagem devem ser configurados no Proxy, a não ser que eles sejam subdiretórios de algum que já tenha sido configurado.

<VirtualHost *:80>
 ServerName app1.xyz.com.br
 ErrorLog "logs/app1.xyz.com.br-error.log"
 CustomLog "logs/app1.xyz..com.br-access.log" common
 ProxyPass               /              http://app1.xyz.com.br:8040/
 ProxyPassReverse        /              http://app1.xyz.com.br:8040/

 ProxyPass              /contexto1      http://app1.xyz.com.br:8040/contexto1
 ProxyPassReverse       /contexto1      http://app1.xyz.com.br:8040/contexto1
</VirtualHost>

Para trabalhar somente com o roteamento das requisições, apontando as requisições recebidas para outros servidores da rede, crie ou edite o arquivo conf/extra/mod_proxy.conf e insira as linhas de acordo com as aplicações e servidores da sua rede:

 ProxyPass           /aplicacao      http://servidor.xyz.com.br:8040/aplicacao
 ProxyPassReverse    /aplicacao      http://servidor.xyz.com.br:8040/aplicacao

 ProxyPass           /teste          http://servidor2.xyz.com.br/teste
 ProxyPassReverse    /teste          http://servidor2.xyz.com.br/teste
 ProxyPass           /teste_qa       http://servidor2.xyz.com.br:8080/teste_qa
 ProxyPassReverse    /teste_qa       http://servidor2.xyz.com.br:8080/teste_qa

Sempre que uma alteração no apache for efetuada o mesmo deve ser reiniciado.

Fontes:

http://www.infoq.com/br/news/2010/06/proxy-reverso
http://pt.wikipedia.org/wiki/Proxy_reverso