Squid não está fazendo cache

8

Eu estou tentando configurar o Squid como um servidor de cache. Eu tenho uma LAN onde O servidor web (apache) está em 192.168.122.11 squid está em 192.168.122.21 e meu cliente está em 192.168.122.22 . O problema é que quando eu olho no log de acesso do Squid, tudo que vejo são TCP_MISS messages. Parece que o Squid não está sendo armazenado em cache. Eu verifiquei que 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-proxy aponta para 192.168.122.21 (adicionado 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
    
por Abhishek Chanda 30.06.2012 / 04:31

2 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 tem por interoperabilidade entre caches outro tipo de protocolo (ICP), que o apache não sabe.

    
por 03.07.2012 / 06:56
6

Na minha experiência, as 3 razões mais comuns pelas quais o Squid se recusa a armazenar o conteúdo em cache são:

  • Permissões do diretório de cache e você cuidou disso. Bom:)
  • http_access , mas não é o seu caso, porque você está vendo TCP_MISS linhas no seu access.log
  • refresh_pattern diretivas

refresh_pattern directiva (s) controla como o Squid considera objetos novos ou obsoletos, particularmente em relação à maneira como o seu navegador faz os pedidos, e quais cabeçalhos HTTP de controle do cache são trocados.

As linhas refresh_pattern que você tem em sua configuração são as linhas padrão do Squid. No entanto, acabei de instalar o Squid no Ubuntu há duas semanas e, com esses padrões, ele armazena quase nada em cache.

A documentação do Squid sobre refresh_pattern deve explicar o significado de cada linha, mas eu realmente 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é que esteja 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 até o máximo de meio dia. Seu navegador pode enviar solicitações HTTP com cabeçalhos de cache específicos que fazem com que o Squid responda com um TCP_MISS mesmo assim. Para forçar respostas em cache, mesmo quebrando as expectativas do cliente, você pode fazer isso:

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 alguma coisa falhar, use um poderoso martelo :) mas eu não recomendo:

refresh_pattern . 3600    80%     14400

com o qual você está dizendo ao Squid que ele pode armazenar em cache tudo por pelo menos 1 hora. No entanto, isso quase certamente irá quebrar 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 se esqueça de 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 subi 10x para 200Mb. YMMV.

maximum_object_size 204800 KB

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

E boa sorte:)

    
por 08.07.2012 / 22:19