Guia do Linux/Avançado/Apache/Configurando o Apache como servidor proxy

Configurando o Apache como servidor proxy

editar

O Apache pode ser configurado para funcionar como servidor proxy transparente para sua rede interna, possibilitando inclusive o uso de cache de disco. É possível se fazer conexões HTTP (incluindo SSL) e FTP. Através desta característica também é possível usar uma das características mais interessante desse servidor web: o redirecionamento de conexões para uma determinada URL para uma outra máquina, que pode ser um outro host remoto ou uma máquina da rede interna (não acessível diretamente via Internet). O primeiro passo é ativar o módulo de proxy no arquivo httpd.conf, basta descomentar a linha:

     # LoadModule proxy_module /usr/lib/apache/1.3/libproxy.so

O seguinte bloco pode ser colocado no final do arquivo httpd.conf para configurar um servidor proxy para realizar conexões diretas (sem o uso de cache) e permitir o uso de servidores proxy em sua rede:

     # Suporte a Proxy
     #
     <IfModule mod_proxy.c>
       ProxyRequests off
       ProxyRemote * http://debian:3128
       ProxyBlock microsoft.com microsoft.com.br
       NoProxy 192.168.1.0/24
       ProxyDomain .gms.com.br

     # Ativa/Desativa a manipulação de cabeçalhos HTTP/1.1 "Via:".
     #
     # ("Full" adiciona a versão do servidor Apache; "Block" remove todos os cabeçalhos
     # de saída "Via:")
     # Escolha uma das opções: Off | On | Full | Block
     #
     #ProxyVia On
     #</IfModule>

Segue a explicação de cada uma das diretivas acima:

  • ProxyRequests [on/off]
    Ativa (on) ou Desativa (off) o serviço de proxy do servidor Apache. Note que o módulo libproxy.so deve estar carregado para que o bloco <IfModule libproxy.c> seja processado. A desativação desta diretiva não afeta a diretiva ProxyPass.
    ProxyRemote [origem] [URL]
    Esta opção é útil para fazer o Apache redirecionar suas requisições para outro servidor proxy (como o squid ou o gateway da rede, caso o Apache estiver sendo executado em uma máquina interna). A origem pode ser uma URL completa (como http://www.debian.org), uma URL parcial (como ftp, http) ou "*" para que o redirecionamento seja sempre usado.
    ProxyBlock [padrão]
    Permite bloquear o acesso a endereços que contenham o padrão especificado. Podem ser especificadas palavras, máquinas, domínios, URLs separados por espaços. O Apache fará a resolução DNS no caso de endereços IP e fará o cache para requisições futuras.
    NoProxy [endereços]
    Permite especificar endereços Internos que não serão redirecionados para o servidor proxy especificado por ProxyRemote. Podem ser usados nomes de máquinas, endereços IP, subredes ou domínios separados por espaços.
    ProxyDomain [endereço]
    Especifica o endereço que será adicionado a URL caso seja recebida uma requisição que contenha somente um nome de máquina. É útil em redes Internas.

Note que quando o suporte a proxy não está ativado no Apache, qualquer endereço de URL externa levará a página definida pela diretiva DocumentRoot. Isto deixará de funcionar após configurar o serviço de proxy. O uso do cache é interessante para acelerar as requisições http da rede interna para a rede externa, desta forma, se uma requisição foi feita anteriormente, será descarregado o arquivo do disco rígido e assim evitar uma nova conexão externa (isto libera a rede para outras coisas). Para configurar um cache no serviço proxy, adicione as seguintes linhas no final do bloco anterior de proxy:

       # As linhas abaixo ativam o cache do apache, o cache não funcionará ao menos que
       # CacheRoot seja especificado
       CacheRoot /var/spool/apache
       CacheForceCompletion 70
       CacheSize 5
       CacheGcInterval 3
       CacheDefaultExpire 5
       CacheMaxExpire 300
       NoCache 192.168.1.0/24 a_domain.com outrodomínio.com.br outro.dominio.net

Cada diretiva acima possui o seguinte significado:

  • CacheRoot
    Diretório base onde serão criados os outros diretórios de cache. O cache só será ativado se esta diretiva for definida.
    CacheForceCompletion [num]
    Se uma transferência for cancelada e passar de num%, o Apache continuará a transferência e armazenará o arquivo no cache. O valor padrão é 90.
    CacheSize [num]
    Define o tamanho máximo do diretório de cache do Apache, em KB. Não especifique um valor que tome mais de 70% do espaço em disco. O valor padrão é 5.
    CacheGcInterval [num]
    Define o tempo que o cache será checado em busca de arquivos maiores que o total do cache. Arquivos que ultrapassem o tamanho do cache são automaticamente eliminados.
    CacheDefaultExpire [num]
    Define o tempo que os documentos ficarão no cache, se foram transferidos através de protocolos que não suportam horas de expiração. O valor padrão é 1 hora.
    CacheMaxExpire [num]
    Define o tempo que os documentos permanecerão armazenados no cache (em horas). Esta opção ignora a hora de expiração do documento (caso fornecida). O valor padrão é 24 horas.
    NoCache [endereços]
    Permite especificar lista de palavras, máquinas, domínios, IP's que não serão armazenados no cache do Apache. Caso seja usado NoCache * o cache será desativado completamente. Note que o cache também pode ser desativado comentando a diretiva CacheRoot.

Se você desejar um servidor cache mais flexível, rápido, dinâmico, configurável (com possibilidade de uso de restrições baseadas em URL, tempo de acesso, autenticação), instale o squid e configure o apache para fazer forward de conexões para ele ([#s-s-apache-proxy-redir Redirecionamento de conexões no Apache, Seção 12.11.2]).


Controlando o acesso ao servidor proxy

editar

Incluir o bloco abaixo no arquivo access.conf para definir o acesso dos serviços de proxy nas redes desejadas (se a sua configuração for aberta como padrão isto pode ser opcional):

     # Acesso aos serviços proxy do apache
     <Directory proxy:*>
         Order deny,allow
         Deny from all
         Allow from .seudominio.com.br
     </Directory>

Para explicações sobre o processo de bloqueio acima, veja [#s-s-apache-acesso-restr-autor Autorização, Seção 12.7.1].


Redirecionamento de conexões no Apache

editar

Este recurso do Apache é interessante para criar clusters de servidores em sua rede interna. O que ele faz é pegar uma requisição a um determinado endereço e redireciona-lo a outra máquina e as respostas são repassadas ao servidor web (para o cliente a mesma máquina esta atendendo a requisição, para você o processamento das requisições esta sendo distribuído internamente na rede). As seguintes diretivas são usadas para realizar o redirecionamento de conexões: ProxyPass e ProxyPassReverse

  • ProxyPass [diretório_da_url [outro_servidor:/diretório]
    A ProxyPass permite que a URL seja redirecionada para o servidor local e diretório especificado. Por exemplo, assumindo que o endereço principal de nosso servidor é http://www.guiafoca.org e desejamos que a URL http://www.guiafoca.org/download seja atendida por uma máquina localizada na nossa rede privada com o endereço http://192.168.1.54. Basta incluir a linha:
     ProxyPass /download http://192.168.1.54

Qualquer requisição externa a http://www.guiafoca.org/download/iniciante será atendida por http://192.168.1.54/iniciante.

  • ProxyPassRemote [diretório_da_url [outro_servidor:/diretório]
    Esta diretiva permite modificar o cabeçalho Location nas mensagens de respostas de redirecionamento enviadas pelo Apache. Isto permite que o endereço retornado seja o do servidor (que faz a interface externa com o cliente) e não da máquina do redirecionamento.
     ProxyPass        /download http://192.168.1.54
     ProxyPassReverse /download http://192.168.1.54

Se a máquina 192.168.1.54 redirecionar a URL para http://192.168.1.54/download/iniciante, a resposta será modificada para http://www.guiafoca.org/download/iniciante antes de ser retornada ao cliente. \