Squid não caching


8

Estou tentando configurar o Squid como um servidor de cache. Eu tenho uma LAN onde o servidor web (apache) está no 192.168.122.11squid 192.168.122.21e no meu cliente está no 192.168.122.22. O problema é que, quando olho para o log de acesso do Squid, tudo o que vejo são TCP_MISSmensagens. Parece que o Squid não está em cache. Eu verifiquei se o diretório de cache tem todas as permissões adequadas. O que mais pode dar errado aqui? Aqui está minha configuração do squid:

acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.1/8 0.0.0.0/32 ::1
acl SSL_ports port 443
acl Safe_ports port 80
acl Safe_ports port 21
acl Safe_ports port 443
acl Safe_ports port 70
acl Safe_ports port 210
acl Safe_ports port 1025-65535
acl Safe_ports port 280
acl Safe_ports port 488
acl Safe_ports port 591
acl Safe_ports port 777
acl CONNECT method CONNECT
http_access allow all
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all
http_port 3128 accel defaultsite=cona-proxy vhost
cache_peer 192.168.122.11 parent 80 0 no-query originserver login=PAS name=webserver
cache_dir ufs /var/spool/squid3 100 16 256
coredump_dir /var/spool/squid3
refresh_pattern ^ftp:   1440    20% 10080
refresh_pattern ^gopher:    1440    0%  1440
refresh_pattern -i (/cgi-bin/|\?)   0   0%  0
refresh_pattern (Release|Packages(.gz)*)$   0   20% 2880
refresh_pattern .   0   20% 4320
always_direct allow all
acl server_users dstdomain cona-proxy
http_access allow server_users
cache_peer_access webserver allow server_users
cache_peer_access webserver deny all

Em todas as máquinas, cona-proxyaponta para 192.168.122.21(adicionado isso em /etc/hosts)

Saída de curl -v 192.168.122.11

* About to connect() to 192.168.122.11 (#0)
* Trying 192.168.122.11... connected
> GET / HTTP/1.1
> User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libculr/7.22.0 OpneSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Host: 192.168.122.11
> Accept: */*
>
< HTTP/1.1 202 OK
< Date Mon, 02 Jul 2012 05:48:50 GMT
< Server: Apache/2.2.22 (Ubuntu)
< Last-Modified: Tue, 19 Jun 2012 23:04:25 GMT
< ETag: "27389-b1-4c2db4dc2c182"
< Accept_Ranges: bytes
< Content-Length: 177
< Vary: Accept-Encoding
< Content-Type: text/html
< X-Pad: avoid browser bug
<
<html><body><h1>It works!</h1>
<p>This is the default web page for the server.</p>
<p>The web server software is running but no content has been added, yet. </p>
</body></html>
* Connection #0 to host 192.168.122.11 left intact
* Closing connection #0

Ao fazer o teste, verifique se as páginas de teste estão permitindo o armazenamento em cache. Por exemplo, páginas SSL não são armazenadas em cache.
— Mircea Vutcovici

Por enquanto, eu apenas tenho a página padrão "Funciona" do Apache. Isso deve ser bem armazenado em cache, eu acho.
— Abhishek Chanda

Eu deveria estar adicionando sua configuração do squid.
— 49630 Christopher Perrin

Adicionado squid config
— Abhishek Chanda

1
Na solicitação de amostra que você postou, o conteúdo não pode ser armazenado em cache.
— symcbean

Respostas:


3

Na sua configuração, você perdeu estas linhas:

acl myhosts src 192.168.0.0/255.255.0.0 (your internal network/netmask)
http_access allow myhosts

EDIT1:

Seu servidor da web não é seu cache_peer. Por favor, remova esta linha do seu arquivo de configuração. O Squid possui para interoperabilidade entre caches outro tipo de protocolo (ICP), que o apache não conhece.


minha rede interna é 192.168.0.0/255.255.255.0. Quando adicionei essas duas linhas, meu navegador dizproxy server is refusing connections
— Abhishek Chanda

1
Se você estiver usando os endereços 192.168.122.11 etc., sua rede não é 192.168.0.0/255.255.255.0, mas 192.168.122.0/255.255.255.0.
— Jan Marek

Ou provavelmente 192.168.0.0/255.255.0.0
— Christopher Perrin

1
Foi o meu primeiro conselho, veja a minha resposta ... :-)
— Jan Marek

Certo! Desculpa! Era muito tarde / cedo quando eu postei!
— Christopher Perrin

7

Na minha experiência, os três motivos mais comuns pelos quais o Squid se recusa a armazenar em cache o conteúdo são:

  • Permissões de diretório de cache, e você cuidou disso. Boa :)
  • http_access, Mas é não o seu caso, porque você está vendo TCP_MISSlinhas em seu access.log
  • refresh_pattern diretrizes

refresh_pattern As diretivas controlam como o Squid considera objetos novos ou obsoletos, principalmente em relação à maneira como o navegador faz as solicitações e a qual controle de cache os cabeçalhos HTTP são trocados.

As refresh_patternlinhas que você tem na sua configuração são as linhas padrão do Squid. No entanto, eu instalei o Squid no Ubuntu há duas semanas e, com esses padrões, ele não armazena quase nada.

A documentação do Squid sobre refresh_pattern deve explicar o significado de cada linha, mas na verdade não consigo entender o que essa documentação significa. E aparentemente eu não estou sozinho :)

Sugiro que você adicione um ou mais dos seguintes padrões e teste arquivos / URLs específicos até ficar satisfeito. Exemplo:

refresh_pattern -i \.(gif|png|jpg|jpeg|ico)$ 3600 90% 43200

Com este, você está dizendo ao Squid para considerar todos os ícones / imagens armazenáveis ​​em cache por pelo menos 1 hora a no máximo meio dia. Seu navegador pode enviar solicitações HTTP com cabeçalhos de cache específicos que fazem com que o Squid responda de TCP_MISSqualquer maneira. Para forçar respostas em cache, mesmo quebrando as expectativas do cliente, você pode fazer o seguinte:

refresh_pattern -i \.(gif|png|jpg|jpeg|ico)$ 3600 90% 43200 override-expire ignore-no-cache ignore-no-store ignore-private

O mesmo vale para arquivos maiores de filme / áudio / iso:

refresh_pattern -i \.(mp[34g]|swf|wav|...)$ 43200 90% 432000

Se algo mais falhar, use um poderoso martelo :), mas eu não recomendo isso:

refresh_pattern . 3600    80%     14400

com o qual você está dizendo ao Squid que ele pode armazenar tudo em cache por pelo menos 1 hora. No entanto, isso quase certamente interromperá aplicativos dinâmicos. Use-o se o servidor que você está tentando armazenar em cache for composto principalmente de conteúdo estático.

Além disso, não esqueça maximum_object_size. Por padrão, é 20Mb . Se os objetos que você está tentando armazenar em cache forem maiores que isso, o Squid não os armazenará em cache. Eu aumentei 10x, para 200Mb. YMMV.

maximum_object_size 204800 KB

BTW, sua cache_peerlinha está incorreta, porque aponta para o Apache. Uma cache_peerfala no squid é outra instância do squid mais alta na hierarquia de cache, que costumava ser um servidor de cache do ISP nos velhos tempos. Apenas remova essa linha.

E boa sorte :)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.