Squid ne met pas en cache

8

J'essaie de configurer Squid en tant que serveur de mise en cache. J'ai un LAN où le serveur Web (apache) est à 192.168.122.11squid est à 192.168.122.21et mon client est à 192.168.122.22. Le problème est que lorsque je regarde le journal d'accès de Squid, je ne vois que des TCP_MISSmessages. Il semble que Squid ne mette pas du tout en cache. J'ai vérifié que le répertoire cache possède toutes les autorisations appropriées. Quoi d'autre peut mal tourner ici? Voici ma config 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

Dans toutes les machines, cona-proxypointe vers 192.168.122.21(ajouté que dans /etc/hosts)

Sortie 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
la source
Lorsque vous testez, assurez-vous que les pages de test autorisent la mise en cache. Par exemple, les pages SSL ne sont pas mises en cache.
Mircea Vutcovici
Pour l'instant, je n'ai que la page par défaut "Ça marche" d'Apache. Cela devrait être bien mis en cache, je pense.
Abhishek Chanda
Je devrais ajouter votre configuration de calmar.
Christopher Perrin
Ajout de la configuration de squid
Abhishek Chanda
1
Dans l'exemple de demande que vous avez publié, le contenu ne peut pas être mis en cache.
symcbean

Réponses:

3

Dans votre configuration, vous avez manqué ces lignes:

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

EDIT1:

Votre serveur Web n'est pas votre cache_peer. Veuillez supprimer cette ligne de votre fichier de configuration. Squid a pour l'interopérabilité entre les caches un autre type de protocole (ICP), que Apache ne connaît pas.

Jan Marek
la source
mon réseau interne est 192.168.0.0/255.255.255.0. Quand j'ai ajouté ces deux lignes, mon navigateur ditproxy server is refusing connections
Abhishek Chanda
1
Si vous utilisez les adresses 192.168.122.11, etc., votre réseau n'est pas 192.168.0.0/255.255.255.0, mais 192.168.122.0/255.255.255.0.
Jan Marek
Ou probablement 192.168.0.0/255.255.0.0
Christopher Perrin
1
C'était mon premier conseil, voir ma réponse ... :-)
Jan Marek
Sûr! Désolé! C'était très tard / tôt quand je l'ai posté!
Christopher Perrin
7

D'après mon expérience, les 3 raisons les plus courantes pour lesquelles Squid refuse de mettre en cache du contenu sont:

  • Cachez les autorisations du répertoire, et vous vous en êtes occupé. Bien :)
  • http_access, mais ce n'est pas votre cas, car vous voyez des TCP_MISSlignes dans votre access.log
  • refresh_pattern directives

refresh_pattern les directives contrôlent la façon dont Squid considère les objets comme frais ou périmés, en particulier par rapport à la façon dont votre navigateur effectue les demandes, et quels en-têtes HTTP de contrôle de cache sont échangés.

Les refresh_patternlignes que vous avez dans votre configuration sont les lignes par défaut de Squid. Cependant, je viens d'installer Squid sur Ubuntu il y a 2 semaines, et avec ces valeurs par défaut, il ne cache presque rien.

La documentation de Squid sur refresh_pattern devrait expliquer la signification de chaque ligne, mais je ne comprends pas vraiment ce que signifie cette documentation. Et apparemment je ne suis pas seul :)

Je vous suggère d'ajouter un ou plusieurs des modèles suivants et de tester des fichiers / URL spécifiques jusqu'à ce que vous soyez satisfait. Exemple:

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

Avec celui-ci, vous dites à Squid de considérer toutes les icônes / images pouvant être mises en cache pendant au moins 1 heure à un maximum d'une demi-journée. Votre navigateur peut envoyer des requêtes HTTP avec des en-têtes de cache particuliers qui obligent Squid à répondre de TCP_MISStoute façon. Pour forcer les réponses mises en cache, même pour briser les attentes des clients, vous pouvez procéder comme suit:

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

Il en va de même pour les fichiers vidéo / audio / iso plus gros:

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

Si autre chose échoue, utilisez un puissant marteau :) mais je ne le recommande pas :

refresh_pattern . 3600    80%     14400

avec lequel vous dites à Squid qu'il peut tout mettre en cache pendant au moins 1 heure. Cependant, cela cassera presque certainement les applications dynamiques. Utilisez-le si le serveur que vous essayez de mettre en cache est principalement composé de contenu statique.

N'oubliez pas non plus maximum_object_size. Par défaut, il est 20Mb . Si les objets que vous essayez de mettre en cache sont plus gros que cela, Squid ne les mettra pas en cache. Je l'ai augmenté 10 fois, jusqu'à 200 Mo. YMMV.

maximum_object_size 204800 KB

BTW, votre cache_peerligne est incorrecte, car elle pointe vers Apache. Un cache_peerdiscours in squid est une autre instance de squid plus haut dans la hiérarchie du cache, qui était habituellement un serveur de cache ISP dans le passé. Supprimez simplement cette ligne.

Et bonne chance :)

Cosimo
la source