Por Jennifer Vesperman - 26/07/2001
O que o Squid pode fazer pelo seu site?
Coloque o Squid entre os usuários e a Internet para fazer cache das páginas web. Os usuários irão navegar mais rapidamente, o tráfego HTTP irá utilizar menos largura de banda, e você pode economizar com despezas de conexão -- ou utilizar a banda economizada para outros tráfegos.
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
.
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.
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.
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.
maximum_object_size
para 40 Mbytes. Se arquivos
grandes são rotineiramente baixados, aumente este valor para 250 Mbytes ou até
700 Mbytes.
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..
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.
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
visible_hostname
para o nome de domínio
qualificado. Por exemplo, gw.mybox.com
dns_testnames
. Se ele não
consegue resolver nomes como "netscape.com", "internic.net", e "nlanr.net",
seu sistema precisa de correções.
memory_pools
para off a menos que haja bastante memória
livre na máquina
log_icp_queries
para on. As consultas ICP vem de outros
proxies -- se você não tem cache-irmão ou cache-pai e estiver recebendo estas
consultas, você vai querer ver estas no arquivo access.log
.
As listas de controle de acesso administram o acesso a sua rede. Este exemplo básico limita o acesso ao proxy à rede 1.2.3.4/24. Ela combina com sucesso se uma solicitação vem de qualquer endereço entre 1.2.3.0 e 1.2.3.255 (inclusive).
acl our_network src 1.2.3.4/24
http_access allow our_network
http_access deny all
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.
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
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.
Para maximizar a velocidade, minimize o número de solicitações simultâneas que o Squid pode tratar. Quanto mais soliticações o Squid tem que processar em paralelo, mais tempo cada solicitação toma. Cada bit de latência que você pode reduzir aumenta a velocidade do servidor.
Planeje ter 20 ou 30 servidores DNS. Consultas DNS podem ser lentas -- alguns backbones continetais podem tomar um minuto ou mais para resolver uma requisição DNS.
fqdncache
e ipcache
.
Maior é melhor. Endereços antigos são menos importantes que muitas entradas e
longos TTLs. Faça cache de endereços por pelo menos 24 horas, e faça cache de
respostas negativas por pelo menos 5 minutos.
Boa parte do que os proxy caches fazem é economizar dolares. É fácil desperdiçar seu proxy -- e dinheiro de verdade em largura de banda -- se você não entender o que está acontecendo. Geralmente é fácil economizar dinheiro se você conhece o problema. A maioria dos serviores web e conteúdo web são operados ou produzidos por pessoas que realmente não entendem o protocolo HTTP. Como administrador de cache, os erros deles irão cair sobre os seus ombros.
Um cache sempre pode usar mais espaço de disco, mas conforme o espaço do seu cache de disco cresce, você precisa de mais memória para indexar ele. Existe uma regra direta para a memória.
Divida o tamanho do seu cache de disco por 13 Kbytes, e multiplique o
resultado por 130 bytes. Acrescente o tamanho de cache_mem
, e
acrescente mais 2.5 Mbytes para arquivos executáveis, bibliotecas, e outras
cargas. Por exemplo: temos um drive de 10 Gbytes, e um cache_mem
de 8 Mbytes.
10 Gbytes / 13 Kbytes = 769.230
769.230 x 130 bytes = 99.999.900 bytes (ou 97.565 Kbytes)
97.656 Kbytes + 2.5 Mbytes + 8 Mbytes = 10.849.656 Kbytes ou cerca de 108 Mbytes
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.).
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.
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
Note que estas opções violam o padrão HTTP. Não use as mesmas levianamente.
override-expire
finge que não há cabeçalhos de expiração nos
objetos e faz o cálculo baseado no momento da última modificação. Esta opção
permite que você faça cache de sites que abusem dos cabeçalhos de expiração,
mas também inibe a atualização de conteúdo que seja frequentemente alterado
(tipo sites de notícias).
ignore-reload
evita que o objeto seja atualizado quando o
usuário aperta o botão de atualizar do seu browser. Isto não funciona bem
quando o objeto não tem o tamanho do conteúdo -- você pode terminar com um
objeto corrompido que os usuários não podem atualizar.
reload-into-ims
transforma os erloads em validações. Cuidado:
servidores web podem permitir que um objeto seja atualizado sem que seja
alterado a hora da última modificação. O servidor pode então insistir que o
objeto ainda é válido quando na verdade não é.
maximum_object_size
. 40 Mbytes não é tão grande.
800 Mbytes pode fazer cache de grandes downloads.
ipcache_size
e o fqdncache_size
.
calamaris
para analizar periodicamente os logs e
procurar por alterações que você pode fazer em seus
refresh_patterns
. Não há uma "boa" configuração única. Os
usuários alteram seus hábitos de navegação e criam novos arquivos, e novas
tecnologias estão sempre sendo desenvolvidas. Adapte-se.
access.log
quando estiver fazendo testes para ver
se você está recuperando páginas do Squid.
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!
Versão inglesa oreillynet.com Copyright © 2000 O'Reilly & Associates, Inc.
Tradução do original em http://www.oreillynet.com/pub/a/linux/2001/07/26/squid.html