Instalando e Configurando o Squid

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.

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

Configuração básica de ACLs

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.

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.

Configuração para velocidade

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.

O que fazer e o que não fazer

Configuração para economia

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.

Espaço em disco e memória

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.).

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

Opções no padrão de refresh

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 é.

Mais coisas a fazer e a não fazer

Problemas e Armadilhas

Ú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

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

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