Ich versuche, Squid als Caching-Server zu konfigurieren. Ich habe ein LAN, in dem sich der Webserver (Apache) bei 192.168.122.11
Squid befindet 192.168.122.21
und mein Client sich bei befindet 192.168.122.22
. Das Problem ist, wenn ich mir das Zugriffsprotokoll von Squid ansehe, sehe ich nur TCP_MISS
Nachrichten. 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-proxy
auf 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
apache-2.2
squid
cache
Abhishek Chanda
quelle
quelle
Antworten:
In Ihrer Konfiguration haben Sie diese Zeilen verpasst:
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.
quelle
192.168.0.0/255.255.255.0
. Als ich diese beiden Zeilen hinzufügte, sagte mein Browserproxy server is refusing connections
Nach meiner Erfahrung sind die drei häufigsten Gründe, warum Squid sich weigert, Inhalte zwischenzuspeichern, folgende:
http_access
, aber es ist nicht Ihr Fall, weil SieTCP_MISS
Zeilen in Ihrem access.log sehenrefresh_pattern
Richtlinienrefresh_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_pattern
Zeilen, 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:
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_MISS
ohnehin mit einem antwortet . Um zwischengespeicherte Antworten zu erzwingen und sogar die Erwartungen der Kunden zu brechen, können Sie Folgendes tun:Gleiches gilt für größere Film- / Audio- / ISO-Dateien:
Wenn alles andere fehlschlägt, verwenden Sie einen mächtigen Hammer :) aber ich nicht dieses empfehlen:
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.Übrigens ist Ihre
cache_peer
Zeile falsch, weil sie auf Apache zeigt. Eincache_peer
In-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 :)
quelle