Este é um artigo que versa sobre a perfumaria de uma rede rodando 100% e você não sabe mais o que fazer para melhorá-la. Squid-prefetch pode ser uma ótima idéia.
Em sistemas Debian-based, usa-se o comando apt-get para realizar a instalação do squid-prefetch:
# apt-get install squid-prefetch
A configuração do squid-prefetch é armazenada por padrão no arquivo /etc/squid-prefetch.conf e segue os moldes do squid.conf, ou seja, totalmente comentado e auto-explicativo:
#informa a localização do arquivo de configuração do squid.
#ele apenas obtém as informações sobre cache_access_log and http_port .
squid_config_file /etc/squid/squid.conf
#o host onde o server squid está rodando.. meio estranho pois não faz
#muito sentido rodá-lo em outro host que não este.
http_host 127.0.0.1
#a porta onde o squid será acessado para baixar as páginas e com isso
#guardá-las em cache.
http_port 3128
#quantas urls o squid-prefetch vai manter em cache para não baixar
#novamente caso outro acesso à página principal seja feito.
max_history_size 5000
#a validade (em segundos) da página que foi baixada antes que seja
#baixada novamente caso seja acessada uma página com referência a ela
max_history_age 8640
#a expressão regular (em perl) que define o que ele vai baixar. Note que
#adicionar extensões de imagens, por ex, não terá efeito positivo.
prefetch_regex http://.*(.(html?|te?xt|php|shtml)|/[^.]*)
#esta opção habilita ou desabilita o programa seguir links que apontem
#para páginas de conteúdo dinâmico que tenham "?" .. por ex, o link
#<a href="www.google.com/search?q=vivaolinux" vivaolinux</a>
#use 1 para habilitar e 0 para desabilitar, e use por conta e risco.
prefetch_options 1
#esta opção habilita ou desabilita a busca de páginas linkadas por âncoras.
#use 1 para habilitar e 0 para desabilitar, e use por conta e risco.
prefetch_fragments 0
#use para limitar o tamanho da página que será buscada, em bytes. #Cuidado com valores muito grandes para não atrapalhar a sua rede.
prefetch_maxsize 65536
#esta opção permite que sejam buscadas páginas que não estejam linkadas
#no mesmo servidor.
#use 1 para habilitar (teste antes, ok?) e 0 para desabilitar
prefetch_cross 0
[1] Comentário enviado por reimassupilami em 28/11/2005 - 14:54h
cara, que boa dica hein... não conhecia esse esquema, achei muito interessante... mas meu servidor é mandrake, e não encontrei pacotes pra ele, dae não sei como proceder, a principio...
de qualquer forma vou procurar melhor, derepente tem algum esquema...
[2] Comentário enviado por dupotter em 28/11/2005 - 15:15h
Bom, o pacote pra debian ta ai no link abaixo, ta hospedado no rapidshare, o esquema lá eh vc clicar em free (canto inferior esquerdo), carregará outra página, ai vc espera um pouco e clica em Download: squid-prefetch_1.0-1_all.deb (parte inferior central da página). Se você é como eu e não utiliza debian, converta o pacote utilizando o alien:
[5] Comentário enviado por paulinholinux em 28/11/2005 - 21:39h
Ai cara blzzzz
curti o artigo, agora me fala uma coisa, estou com squid funcionando e ele nao ta fazendo cache do winupdade ... vc ja testou esse seu sistema com as atualizações do winupdade??
porqe ja tentei de tdo pra tentar resolver o problema de nao estar fazendo cache do winupdade e de atualizações de NAV2005 e AVG e demias páginas e programas a cache é realizada perfeitamente....
mas vc ja testou com winupdade?? funcionou certinho.....??
[6] Comentário enviado por jmhenrique em 28/11/2005 - 22:20h
Prezado, essa dica é apenas para o pre-cache de arquivos texto, esse é o propósito. Para cache de arquivos binários e de updates, vai depender da sua configuração do squid mesmo.
[8] Comentário enviado por reimassupilami em 29/11/2005 - 08:16h
yabadabadooo, o meu tb nao fazia cache do windows update, dae percebi que o problema era o tamanho maximo dos arquivos armazenados... verifique isso, pois geralmente os arquivos são bem grandes...
[9] Comentário enviado por mzoel em 29/11/2005 - 14:18h
Olá Henrique, fiz alguns testes. O meu squid utiliza autenticação via LDAP e o squid-prefetch acusou o seguinte warning quando analisei pelo strace: fetch "http://www.ibm.com/br/: 407 (Proxy Authentication Required)" e simplesmente não está fazendo prefetch de site algum. Pelo que entendi, o sistema utiliza o próprio squid para popular o cache e por isso não tenho como bypassá-lo. Acredito também que não tenho como informar um usuario/senha para que o squid-prefetch autentique no proxy, estou certo? existe alguma forma de fazê-lo?
[11] Comentário enviado por jmhenrique em 30/11/2005 - 07:59h
mzoel, na sua configuração do squid, apenas diga para localhost não ser autenticado.
aqui eu não uso ldap, mas eu fiz assim: dansguardian na porta 3128, squid na porta 1000. Quem não quiser ser autenticado, rode na 3128, mas também esteja sujeito as restrições do dansguardian. Quem se conectar na porta 1000 pede login/senha. Mas ai faz o controle so do squid. Ou seja, requisições vindas de localhost (dansguardian,squid-prefetch) não são autenticadas.
Ou seja, perfeitamente possível de ser implementado no seu cenário.
[ ]s, Henry
[15] Comentário enviado por luiz humberto em 30/12/2005 - 10:27h
Estou com receio de usar e com isso acabar consumindo toda a banda, o que preciso atentar para que isso não ocorra ? Precisa configuarar algo no squid.conf ?
Estou usando o debian após instalar pelo apt-get, como posso fazer testes para saber que está funcionando corretamente ? Tipo um comando.
Obrigado
[16] Comentário enviado por jmhenrique em 30/12/2005 - 11:40h
A idéia não é economia de banda... e sim aproveitamento da banda ociosa para baixar páginas. O que eu noto é que nas primeiras horas do dia se usa 80 a 99% da banda, e no decorrer do dia, cai bastante.
A idéia de consumo de 100% de banda te assusta? que adianta ter um link de 200MBps e só usar 100kbps?
o problema maior que eu vejo é uso de banda com inutilidades.
a menos que vc use o seu link para outras coisas, como vpn.
você pode fazer um pool no squid, e especificar o quanto da banda vc quer usar.
[17] Comentário enviado por luiz humberto em 30/12/2005 - 16:08h
Não posso consumir toda a banda, pois tenho um Terminal Server rodando, então precisa configurar algo no squid.conf, e como saber se funcionou corretamente, teria algum comando, ou somente fazendo os testes ?
[18] Comentário enviado por jmhenrique em 30/12/2005 - 21:12h
sinto muito lhe informar, mas não existe "comando milagroso" para este caso.
como disse anteriormente, use delays pools no squid para definir a banda de rede utilizada, deve haver tutoriais no vol sobre implementação de delay pools.
se quiser fazer um teste para saber se squid-prefetch esta funcionando, em um horário que ninguem estiver acessando, de uma máquina qualquer da sua rede acesse apenas a página inicial de um determinado site. E veja depois nos logs se localhost baixou outros links mais que a página inicial do site. Uma boa página para se fazer isso, na minha opinião, é o site da Unicamp.
[19] Comentário enviado por balani em 20/07/2006 - 14:27h
Cara, gostei do artigo, achei interessante e estou interessado em usar, vc sabe se há algum problema com o dansguardian, pois uso o squid com dansguardian.
[20] Comentário enviado por gumedina em 20/09/2006 - 11:07h
Cara seguinte..baixei o arquivo .tar.gz, descompaquitei e dou o comando ./squid-preftch ai da esse erro...
Can't locate URI.pm in @INC (@INC contains: /usr/lib/perl5/5.8.7/i486-linux /usr/lib/perl5/5.8.7 /usr/lib/perl5/site_perl/5.8.7/i486-linux /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl .) at ./squid-prefetch line 11.
BEGIN failed--compilation aborted at ./squid-prefetch line 11.
ai comento a linha 11 e a 12 que sao essas
use:URI;
use Net: :HTTP;
ai roda sem da erro...mas sera q esta funcionando 100%...essa é minha duvida.
agradeço a atençao...meu email é gumedina1@hotmail.com
abraços...
[21] Comentário enviado por cytron em 26/11/2006 - 20:14h
Cara! Minha preocupação é o seguinte:
Se eu ativar pra conteúdo dinâmico, que usa ? na url, a questão não é bem o desperdício de banda, mas a decisão antecipada, veja:
O cara entra num site onde ele tem um termo para conteúno inapropriado:
O conteúdo deste site... Declaro que sou de maior - Sou de menor
Daí o squid-prefetch vai abrir ativar os dois links fazendo com que o servidor remoto pense que o usuário clicou na opção, valendo a que chegar primeiro. Daí quando o usuário tentar clicar o sistema vai avisar que ele já fez a escolha dele.
Agora imagina isso em sites de empresas, bancos, concursos, no dia-a-dia de trabalho de pessoas que usam muito a net para preencher formulários e tal.
Vira bagunça mesmo ou o squid-prefetch já prevê esse tipo de coisa?
[22] Comentário enviado por jmhenrique em 26/11/2006 - 22:45h
Interessante a sua pergunta, e mais interessante ainda a resposta: Essa "tomada de decisão" é na camada do cliente, e gerenciada por cookies no navegador do cliente final. Ou seja... ele(o squid-prefetch) não pode prever algo que nem está em sua competência gerenciar. Apenas como exemplo de prova, imagine 2 usuários acessando o webmail do yahoo e usando o squid como proxy. Como será que o squid gerencia isso? A resposta é simples: NÂO GERENCIA. Isso quem gerencia é o modelo cliente-servidor da aplicação web. E zilhares de pessoas acessam normalmente seus emais, bancos e etc, usando squid e até mesmo outros proxies, e nunca deu problema... (não por causa do squid, e nem por causa do squid-prefetch).
[ ]s, Henry.
[25] Comentário enviado por jmhenrique em 07/12/2006 - 21:51h
abaixo uma linha de log do meu squid. (para ter essa saida monstruosa, eu habilitei "log_mime_hdrs on" no meu squid.conf)
perceba os trechos "User-Agent: Squid-Prefetch" e "TCP_HIT/200" . Se você ver isso, parabéns.
[26] Comentário enviado por tntmidia em 08/12/2006 - 02:17h
olha, pode esta faltando alguma coisa na compilaçao ou na configuraçao? Precisa alguma coisa a mais, uso squid transparente...
Nao foi dessa vez o parabens, pra mim... :)
1165540038.848 163 23.0.0.3 TCP_MISS/200 6128 GET http://www.unicamp.br/cgi-bin/unicamp/rot_foto.cgi - DIRECT/143.106.10.30 image/jpeg [Accept: */*\r\nReferer: http://www.unicamp.br/unicamp/ensino_pesquisa/ensino.html\r\nAccept-Language: pt-br\r\nProxy-Connection: Keep-Alive\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\nHost: www.unicamp.br\r\n] [HTTP/1.0 200 OK\r\nDate: Fri, 08 Dec 2006 04:06:31 GMT\r\nServer: Apache/2.0.59 (Unix) mod_ssl/2.0.59 OpenSSL/0.9.8d PHP/4.4.4\r\nExpires: Friday, 30-Sep-94 12:00:00 GMT\r\nContent-Type: image/jpeg\r\nX-Cache: MISS from cp0.squid.com.br\r\nVia: 1.0 cp0.squid.com.br:3128 (squid/2.6.STABLE4)\r\nConnection: close\r\n\r]
[30] Comentário enviado por aroldobossoni em 04/07/2007 - 20:07h
Quando a conexão esta momentaneamente saturada o Squid-Prefetch ainda sim continua a fazer pedidos ou ele tem algum tipo de monitoramento que impede isso?
Em casos que ah pouco espaço de armazenamento ou a banda já esta em um nível de utilização alto, você desaconselha o uso do Squid-Prefetch?
Tem mais algum caso que você desaconselha o uso do Squid-Prefetch?
[31] Comentário enviado por jmhenrique em 05/07/2007 - 10:21h
Aroldobossoni,
para a sua primeira pergunta, vide C2. :D
para a sua segunda pergunta, vide C2 E C3. :D
para a sua terceira pergunta, sim. Desaconselho o uso em caso da sua rede não estar estável, você não ter o pleno controle sobre ela mentalmente e você não souber de cabeça quantos bits passam por segundo por ela, quais os sites que os seus usuários acessam e quanto cada um utiliza, bem como o estilo do site. Squid-prefetch é uma perfumaria. Não uma necessidade. (se bem que estão pensando em colocar prefetcherismo embutido no squid)
[33] Comentário enviado por cytron em 09/12/2007 - 20:37h
Após muito tempo resolvi pegar novamente no squid-prefetch, mas agora fiz diferente:
Fiz algumas alterações, meu servidor utiliza um link principal para as máquinas navegarem na internet, então coloquei uma ADSL de 8 MB para o squid-prefetch ficar baixando as páginas e alimentando o cache do proxy.
Resultado:
A internet mais ignorante que já ví!!!
Estou rindo para as parendes, coloquei o prefetch para abusar mesmo, pois tem 8 MB só pra ele, claro que o espaço em disco aumenta rapidamente, mas chega uma hora que estabiliza e o prefetch fica apenas atualizando o cache. Pois os usuários tem um perfil de navegação e pouca coisa nova é baixada depois que se baixa tudo que ele já viu e o que ainda vai ver, ehehehehe.
[34] Comentário enviado por jdnva em 21/02/2008 - 19:24h
muito bacana
gostei dessa parada ai
adhuashduahsudhausdhas
esse cara aki di cima dos 8MB eh esperto^^
isso ficaria legal pra akeles cara que tem provedor de internet sem fio
que usa o microtik ^^
que sao 12MB pra 400 usuarios ~^^
^
[35] Comentário enviado por minelli em 24/06/2014 - 16:43h
Estranho aqui que aparece isso em 90% dos sites abertos sempre esse mesmo erro, mas no navegador abre normal e pelo lynx também:
perl /usr/sbin/squid-prefetch 2>&1
fetch: http://educacao.uol.com.br/:">http://educacao.uol.com.br/: 504 (Gateway Time-out)
Content-Type -> text/html
Via -> 1.0 lusca-cache:5129 (Lusca)
Content-Length -> 1204
Server -> Lusca
Date -> Tue, 24 Jun 2014 19:40:29 GMT
X-Cache -> MISS from lusca-cache
X-Cache-Lookup -> MISS from lusca-cache:5129
X-Squid-Error -> ERR_ONLY_IF_CACHED_MISS 0
Connection -> close
Warning: fetch returned code 504 (Gateway Time-out) for http://educacao.uol.com.br/
fetch: http://www.globo.com/:">http://www.globo.com/: 504 (Gateway Time-out)
Content-Length -> 1192
Via -> 1.0 lusca-cache:5129 (Lusca)
Content-Type -> text/html
Date -> Tue, 24 Jun 2014 19:40:45 GMT
Server -> Lusca
X-Cache -> MISS from lusca-cache
Connection -> close
X-Squid-Error -> ERR_ONLY_IF_CACHED_MISS 0
X-Cache-Lookup -> MISS from lusca-cache:5129
Warning: fetch returned code 504 (Gateway Time-out) for http://www.globo.com/
[36] Comentário enviado por marcoscg72 em 30/06/2015 - 17:45h
Júlio,
Meus parabéns pelo artigo.
Ao tentar executar o service squid-prefetch start ou ao tentar executá-lo diretamente retorna o erro:
squid-prefetch Error: could not read access log /var/log/squid3/access.log squid (No such file or directory)