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
Abhishek Chanda
fonte
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.

Jan Marek
fonte
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 :)

Cosimo
fonte