Tintenfisch zwischenspeichert nicht

8

Ich versuche, Squid als Caching-Server zu konfigurieren. Ich habe ein LAN, in dem sich der Webserver (Apache) bei 192.168.122.11Squid befindet 192.168.122.21und mein Client sich bei befindet 192.168.122.22. Das Problem ist, wenn ich mir das Zugriffsprotokoll von Squid ansehe, sehe ich nur TCP_MISSNachrichten. Es scheint, dass Squid überhaupt nicht zwischenspeichert. Ich habe überprüft, ob das Cache-Verzeichnis alle richtigen Berechtigungen hat. Was kann hier noch schief gehen? Hier ist meine Tintenfischkonfiguration:

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

Zeigt in allen Maschinen cona-proxyauf 192.168.122.21(fügte hinzu, dass in /etc/hosts)

Ausgabe von 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
quelle
Stellen Sie beim Testen sicher, dass die Testseiten das Caching zulassen. Beispielsweise werden SSL-Seiten nicht zwischengespeichert.
Mircea Vutcovici
Im Moment habe ich nur Apaches Standard-Seite "Es funktioniert". Das sollte gut zwischengespeichert werden, denke ich.
Abhishek Chanda
Ich sollte Ihre Tintenfischkonfiguration hinzufügen.
Christopher Perrin
Tintenfischkonfiguration hinzugefügt
Abhishek Chanda
1
In der von Ihnen geposteten Beispielanforderung kann der Inhalt nicht zwischengespeichert werden .
Symcbean

Antworten:

3

In Ihrer Konfiguration haben Sie diese Zeilen verpasst:

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

EDIT1:

Ihr Webserver ist nicht Ihr cache_peer. Bitte entfernen Sie diese Zeile aus Ihrer Konfigurationsdatei. Squid hat für die Interoperabilität zwischen Caches einen anderen Protokolltyp (ICP), den Apache nicht kennt.

Jan Marek
quelle
Mein internes Netzwerk ist 192.168.0.0/255.255.255.0. Als ich diese beiden Zeilen hinzufügte, sagte mein Browserproxy server is refusing connections
Abhishek Chanda
1
Wenn Sie die Adressen 192.168.122.11 usw. verwenden, lautet Ihr Netzwerk nicht 192.168.0.0/255.255.255.0, sondern 192.168.122.0/255.255.255.0.
Jan Marek
Oder wahrscheinlich 192.168.0.0/255.255.0.0
Christopher Perrin
1
Es war mein erster Rat, siehe meine Antwort ... :-)
Jan Marek
Sicher! Es tut uns leid! Es war sehr spät / früh, als ich es gepostet habe!
Christopher Perrin
7

Nach meiner Erfahrung sind die drei häufigsten Gründe, warum Squid sich weigert, Inhalte zwischenzuspeichern, folgende:

  • Cache-Verzeichnisberechtigungen, und Sie haben sich darum gekümmert. Gut :)
  • http_access, aber es ist nicht Ihr Fall, weil Sie TCP_MISSZeilen in Ihrem access.log sehen
  • refresh_pattern Richtlinien

refresh_pattern Direktive (n) steuern, wie Squid Objekte als frisch oder veraltet betrachtet, insbesondere in Bezug auf die Art und Weise, wie Ihr Browser die Anforderungen stellt, und welche HTTP-Header für die Cache-Steuerung ausgetauscht werden.

Die refresh_patternZeilen, die Sie in Ihrer Konfiguration haben, sind die Standardzeilen von Squid. Ich habe Squid jedoch erst vor 2 Wochen unter Ubuntu installiert und mit diesen Standardeinstellungen wird fast nichts zwischengespeichert.

Die Dokumentation von Squid zu refresh_pattern sollte die Bedeutung jeder Zeile erklären, aber ich kann eigentlich nicht verstehen, was diese Dokumentation bedeutet. Und anscheinend bin ich nicht alleine :)

Ich würde Ihnen empfehlen, eines oder mehrere der folgenden Muster hinzuzufügen und bestimmte Dateien / URLs zu testen, bis Sie zufrieden sind. Beispiel:

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

In diesem Fall weisen Sie Squid an, alle Symbole / Bilder für mindestens 1 Stunde bis maximal einen halben Tag zwischenspeicherbar zu halten. Ihr Browser sendet möglicherweise HTTP-Anforderungen mit bestimmten Cache-Headern, die dazu führen, dass Squid TCP_MISSohnehin mit einem antwortet . Um zwischengespeicherte Antworten zu erzwingen und sogar die Erwartungen der Kunden zu brechen, können Sie Folgendes tun:

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

Gleiches gilt für größere Film- / Audio- / ISO-Dateien:

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

Wenn alles andere fehlschlägt, verwenden Sie einen mächtigen Hammer :) aber ich nicht dieses empfehlen:

refresh_pattern . 3600    80%     14400

mit dem Sie Squid sagen, dass es alles für mindestens 1 Stunde zwischenspeichern kann. Dies wird jedoch mit ziemlicher Sicherheit dynamische Anwendungen beschädigen. Verwenden Sie diese Option, wenn der Server, den Sie zwischenspeichern möchten, hauptsächlich aus statischem Inhalt besteht.

Vergiss auch nicht maximum_object_size. Standardmäßig sind es 20 MB . Wenn die Objekte, die Sie zwischenspeichern möchten, größer sind, werden sie von Squid nicht zwischengespeichert. Ich habe es 10x auf 200Mb erhöht. YMMV.

maximum_object_size 204800 KB

Übrigens ist Ihre cache_peerZeile falsch, weil sie auf Apache zeigt. Ein cache_peerIn-Squid-Speak ist eine weitere Squid-Instanz weiter oben in der Cache-Hierarchie, die früher normalerweise ein ISP-Cache-Server war. Entfernen Sie einfach diese Zeile.

Und viel Glück :)

Cosimo
quelle