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
- 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
Estamos precisando implantar isso aqui… rsrs
Pra quando mesmo?? rsrs