Professional Documents
Culture Documents
Encontrando o Squid
O código fonte do Squid está disponível em squid-cache.org. Também há uma lista de mirrors. As
instruções de instalação estão disponíveis no arquivo README no arquivo tar dos fontes.
Existe também um pacote RPM para o Red Hat Linux, e pacotes para o FreeBSD e NetBSD.
Instruções para instalar os pacotes estão disponíveis nos sites dos pacotes. Todos os três conjuntos
de pacotes vem com o código fonte do Squid e instruções adicionais para instalação dos fontes.
O script ./configure possui várias opções. Um conjunto de opções recomendadas é
./configure --enable-heap-replacement --enable-cache-digests --
enable-dlmalloc.
Configurando o Squid
O arquivo de configuração do Squid está no diretório $SQUID-HOME/etc/squid.conf. O
arquivo contém extensos comentários para cada opção. Este artigo é uma referência rápida para
quais opções você provavelmente irá querer alterar. Sua rede local pode exigir configurações não
mencionadas neste artigo.
Quando você tiver o Squid configurado, execute squid -z para criar a estrutura de diretório do
cache. A seguir você pode iniciar o Squid.
Configuração básica
• Cheque http_port, icp_port e htcp_port. 3128 é um bom valor padrão, e 8080 é
uma alternativa razoável para HTTP. A porta 80, ou qualquer outra porta normalmente
utilizada por algum outro serviço devem ser evitadas se possível.
• Deixe cache_mem com o valor de 8 Mbytes para começar, a menos que você tenha entre
0.5 Gbytes e 1 Gbyte de RAM disponível normalmente. Caso positivo, configure cache-
mem para 128 Mbytes. Ajuste cache_mem assim que os padrões do cache local se tornarem
conhecidos.
• Aumente o maximum_object_size para 40 Mbytes. Se arquivos grandes são
rotineiramente baixados, aumente este valor para 250 Mbytes ou até 700 Mbytes.
• Configure cache_dir para uma área que tenha bastante espaço. Tecnicamente ele
pertence a /var, mas você pode não querer que ele seja becapeado. Não configure o mesmo
para usar mais de 70 porcento do espaço, o Squid usa este diretório para armazenar arquivos
journal também. Linhas tipo cache_dir ufs /var/cache/squid 80000 16
256 são comuns..
• Mude access_log e cache_log para on. O primeiro parâmetro informa a você quem
está fazendo o quê, e o último informa quando as coisas não estão certas.
• cache_swap_log é o local para os arquivos journal mencionados em cache_dir. O
local padrão é o mesmo diretório de cache_dir
• pid_filename deve ser configurado. /var/log/squid/squid.pid é um bom
lugar. O Squid utiliza este arquivo para o desligamento, rotação de arquivos de log, ou para
reler suas configurações.
• refresh_pattern é um parâmetro que afeta como os objetos são verificados para saber
qual o mais recente. Um valor padrão razoável é refresh_pattern . 0 20% 10080
• cache_mgr é para pessoas que configuram o cache para relatar problemas. Certifique-se
de usar um endereço de email que você realmente leia.
• cache_effective_user e cache_effective_group devem ser configurado para
um usuário e grupo "proxy". Muitas distribuições tem este usuário e grupo pré-instalados.
• Faça um chown recursivo nos direórios de cache e log para o usuário "proxy" antes de
iniciar o Squid. Este usuário deve poder ler o arquivo de configuração e o diretório em que o
mesmo está.
chown -R proxy.proxy /var/log/squid /var/cache/squid
As ACLs são verificadas de cima para baixo. Os clientes que tem o endereço IP em
our_network recebem permissão, qualquer outro irá cair para a regra deny all e receberá
uma mensagem de erro. O formato para a definição de classe é acl listname src
network/netmask.
As ACLs tem uma última linha implícita que reverte a linha anterior. Esta serve como proteção
contra o esquecimento da regra http_access deny all, mas acrescentar explicitamente
aquela linha torna a ACL mais legível e ajuda a garantir que ela não foi esquecida quando a ACL
foi alterada.
miss_access
Se um objeto não está no cache ou não está marcado como recente, o Squid verifica com o servidor
de origem se ele ainda é atual e solicita uma nova cópia se ele não for atual. Este comportamento
serve bem aos usuários locais, mas não é desejável se o cliente que fez a solicitação é um servidor
proxy vizinho. As seguintes linhas ACL permitem que sejam passados objetos que não estão no
cache para a rede local, mas negam este serviço para qualquer um fora da rede local.
miss_access allow our_network
miss_access deny all
icp_access
Os caches se comunicam com mensagens ICP para descobrir se eles tem conteúdo recente que
satisfaça a uma requisição. As linhas ACL icp_access são usadas para controlar os caches com
os quais o Squid pode se comunicar.
O servidor de exemplo precisa de 108 Mbytes disponíveis para o Squid para suportar 10 Gbytes de
cache_dir.
Acrescente tanto espaço de disco quanto RAM que você pode aacrescentar para suportar o mesmo.
O Squid tem uma péssima performance quando ele começa a fazer swap. Lembre de deixar
memória sobrando na máquina para qualquer outra coisa que você tenha instalado (DNS, cron,
sistema operacional, etc.).
Padrões de refresh
Os padrões de refresh determinam o tempo de vida dos objetos. Durante a vida de um objeto, o
Squid irá servir o objeto sem executar uma solicitação IMS ("if modified since" -- se modificado
desde). Assim que terminar o tempo de vida, o Squid irá manter o objeto, mas irá enviar uma
solicitação IMS para o servidor de origem. Se o objeto foi modificado desde que foi cacheado pela
primeira vez, o Squid irá solicitar uma nova cópia. Se não, então ele irá manter a cópia antiga. De
qualquer forma, o objeto é marcado como novo, novamente.
Aqui está nosso padrão de refresh básico (default):
refresh_pattern . 0 2% 4320
O ponto (.) é o padrão expressão regular, e combina com qualquer coisa. São usadas as expressões
regulares POSIX (veja man 7 regex).
O zero (0) é o tempo mínimo que um objeto pode ser considerado novo. Se for diferente de zero,
então ele irá substituir qualquer cabeçalho com informação de expiração que for dado com o objeto.
Se o fornecedor de conteúdo fornecer um cabeçalho de expiração, devemos honrar o mesmo.
O último termo (4320) é o tempo máximo que um objeto pode ser considerado novo. O objeto se
torna antigo após esta quantia de minutos no cache.
O valor de 20 porcento é usado para nosso caso padrão, para o qual não há informação do provedor
de conteúdo sobre o tempo de vida do objeto. O Squid usa x porcento (20 porcento neste exemplo)
da diferença entre a hora da última modificação do objeto e a hora atual, e usa este valor como o
tempo de vida do objeto. Se o tempo de vida do objeto é menor que o mínimo configurado pelo
refresh_pattern, ele é aumentado até aquele valor. Se for maior que o valor máximo
informado, ele é reduzido para aquele valor.
Arquivos não-padrão
Alguns tipos de arquivos podem ser mantidos por muito mais tempo que outros. Arquivos zip,
tar.gz, tgz e .exe raramente tem seu conteúdo alterado sem que também seja alterado o nome.
Usando expressões regulares, podemos criar um conjunto de padrões como o que segue:
refresh_pattern -i exe$ 0 50% 999999
refresh_pattern -i zip$ 0 50% 999999
regresh_pattern -i tar\.gz$ 0 50% 999999
refresh_pattern -i tgz$ 0 50% 999999
Problemas e Armadilhas
• Em muitos clientes, o "reload" força o cache a recarregar o objeto de sua origem. Isto pode
causar problemas de teste.
• Não teste o Squid com páginas que tenham cabeçalhos "não guarde em cache". O Squid não
irá colocar elas em cache.
• Utilize o access.log quando estiver fazendo testes para ver se você está recuperando
páginas do Squid.
• As listas de controle de acesso tem uma última linha implícita que reverte a regra da última
linha explícita.
Últimas palavras
O Squid pode melhorar a velocidade de navegação e reduzir o consumo de banda HTTP. O arquivo
squid.conf permite bastante flexibilidade, mas pode ser intimidante a princípio. As
configurações informadas neste artigo ajudam a iniciar -- mas são apenas o início. Faça
experiências!
Leitura Adicional
• Squid, A User's Guide
• Squid configuration manual
• $SQUID-HOME/etc/squid.conf
• RFC 2616: Hypertext Transfer Protocol - HTTP/1.1
Jennifer Vesperman gosta de pensar que nasceu com uma pastilha de silício grudada em sua
coluna, mas não consegue fazer que seus pais admitam isto. Ela contribui para o Open Source,
principalmente como usuária e defensora. Jenn é a coordenadora atual do Linuxchix.org