Configurando um servidor proxy usando o Apache

Neste artigo irei mostrar uma funcionalidade pouco conhecida mas muito útil do Apache, que é a possibilidade de ser configurado como servidor proxy, através do mod_proxy.

O servidor web Apache certamente é um dos softwares livres mais usados em ambientes de servidores. Na última pesquisa da Netcraft, ocorrida em dezembro de 2002 (veja aqui as estatísticas), o Apache ficou responsável por 60% das hospedagens de todas as páginas do mundo, o que é bem razoável o mostra o grau de maturidade deste software.

Apache

Este artigo mostrará uma recurso um pouco diferente deste servidor, que difere um pouco da mais comumente usada hospedagem de páginas e aplicações. Mostrarei como user o Apache para funcionar como servidor proxy, ou seja, um servidor intermediário entre o usuário e o recurso que ele está acessando, possivelmente armazenando as informação requisitadas para fornecê-las em alta velocidade quando for novamente solicitada, sem precisar fazer uso da conexão com a Internet, caso o recurso esteja fora da rede local.

O proxy é muito útil e conhecido para acesso à Internet por redes locais que só têm uma conexão de saída. Se o tráfego for intenso, este ponto único de conexão se tornará um gargalo, que pode ser eliminado armazenando as solicitações internamente ao gateway (normalmente) e só realizar o acesso externo quando for realmente necessário.

Para esta funcionalidade, geralmente o software mais indicado, no mundo Linux, é o Squid, que tem muitos recursos para realizar, e muito bem, a tarefa de mediador de conexões, com recursos de cache e gerência. Existem situações onde um proxy mais simples já daria conta do problema. Nestes casos o Apache pode ser uma boa opção, já que é simples e rápido de instalar e configurar.

Existem outras funcionalidades para um proxy, como ajudar a balancear a carga de um determinado servidor muito requisitado. Neste tutorial, utilizarei o Apache 2.0 como base.

Primeiramente precisaremos habilitar o módulo mod_proxy, que não vem instalado no Apache por padrão. Para recompilá-lo, utilize o parâmetro –enable-module=proxy no script configure. Depois é só rodar o make && make install. Caso tenha instalado via gerenciador de pacotes (o que não é muito recomendável, dependendo do ambiente), informe-se sobre como o suporte ao mod_proxy é fornecido.

A ativação é bastante simples, basta colocar a diretiva ProxyRequests On no seu arquivo de configuração do apache2, geralmente httpd.conf. Depois crie um contêiner de diretório usando Directory proxy:*. Agora falta apenas configurá-lo, através das diretivas do módulo, que serão mencionadas a seguir. Utilize-as dentro do contêiner, entre as tags Directory.

O asterisco (*) significa que qualquer URL solicitada será processada pelo Apache. Dessa forma configuramos nosso servidor proxy direto. É possível também utilizar expressões regulares para aumentar a flexibilidade do servidor. Agora habilitaremos o cache dentro do servidor proxy. Para isso, coloque as seguintes diretivas dentro do seu contêiner Directory:

CacheRoot /var/www/cache
CacheSize 1024
CacheMaxExpire 24

Isto define o diretório /var/www/cache como a raíz do armazenamento do proxy, que terá no máximo 1MB e expirará em 24 horas. Mude as configurações de acordo com a sua necessidade. Uma das partes mais interessantes de se criar um proxy com o Apache é poder utilizar todas as suas outras diretivas juntamente ao proxy. Por exemplo, para proteger o proxy com o recurso de autenticação do Apache, através do mod_auth, coloque também estas diretivas junto às anteriores:

AuthType Basic
AuthName Proxy
AuthUserFile /caminho/para/seu/arquivo/de/senhas
Require valid-user

Também é possível restringir o acesso a um determinado protocolo. Basta mudar seu contâiner de Directory proxy:* para Directory proxy:http:* por exemplo.

Outro recurso muito interessante é o fornecido pela diretiva ProxyPass, que mapeia um determinado ramo da árvore de documentos de um determinado servidor web dentro do seu proxy. É como um mirror, só que mais simples, atuando dentro de um proxy. Para ativar, insira a seguinte linha de exemplo em seu Directory:

ProxyPass / www.apache.org/

Ela está definindo que qualquer acesso à raíz de diretório do proxy irá mapear o site do apache. Trata-se de um recurso bem interessante, principalmente para fins de balanceamento, juntamente com a diretiva CacheRoot. Lembre-se que é proibido espelhar um servidor de terceiros. Certifique-se de ter autorização para fazer isso.

Por último, também é possível interfacear parte do acesso para outro servidor proxy com a diretiva ProxyRemote, definindo um certo endereço (ou expressão regular) e um servidor proxy externo para responder por este acesso. Assim, é possível criar um multiplexador de acesso baseado na URL que o cliente requisita, centralizando a configuração de um ambiente com vários servidores proxy.

Espero que o artigo tenha sido útil e tenha conseguido mostrar mais uma das muitas funcionalidades que este software notável é capaz de exercer. Convém lembrar, mais uma vez, que os recursos mostrados neste artigo são integráveis com as outras diretivas e módulos do Apache, inclusive extensões que podem ser escritas em Perl, aumentando muito as possibilidades do Apache. Realmente não há como competir assim.

Artigos Relacionados:


Sobre este artigo