Guia do Linux/Avançado/Apache/Configurando o Apache como servidor proxy
Configurando o Apache como servidor proxy
[editar | editar código-fonte]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 | editar código-fonte]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 | editar código-fonte]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 URLhttp://www.guiafoca.org/download
seja atendida por uma máquina localizada na nossa rede privada com o endereçohttp://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.
\