24.03
2008

Squid als Reverse-Proxy

Aufbau des Systems:

  • Vor dem Webserver wird der Squid geschaltet (vorgelagert).
  • Die DNS-Einträge für das Webangebot zeigen jetzt auf den Squid-Cache. Client-Anfragen landen also auf dem Squid, anstatt auf dem Webserver.

Vorteile:

  • Weniger Last auf dem Webserver, je nach Angebot bis zu 70%.
  • Squid kann eine Anfrage um ein Vielfaches schneller beantworten als der Webserver. Er gleicht nur eine Hash-Tabelle ab, und benötigt keinen Festplattenzugriff. Nur wenn die Antwort veraltet ist oder nicht vorliegt, leitet er die Anfrage an den eigentlichen Webserver weiter
  • Beschleunigung von dynamischen Webseiten (PHP, CGI, ASP, …)
  • Deutliche Einsparung von Rechenleistung auf Web- und Datenbank-Servern
  • Es können deutlich mehr Anfragen von Squid und Webserver beantwortet werden.

Der Webserver startet pro Anfrage einen eigenen Prozess (oder Thread), um die Datei ausliefern zu können. Bei dynamischen Seiten (PHP,ASP ..) mit Datenbankabfragen wird viel CPU-Leistung und Arbeitsspeicher verbraucht.

Der Squid hingegen braucht nur einen einzelnen Prozess, mit dessen Hilfe er seinen Cache durchsucht. Während ein typischer Webserver-Zugriff mit einfachen Tools wie top (unter Unix) bereits zu bemerken ist, bleibt die Belastung durch den Squid praktisch bei null.

Hierzu einige Zahlen aus der Praxis:

Durch einen vorgelagerten Squid, konnt die Belastung des Webserver einer Tageszeitung um 54% reduziert werden. Die Auslastung des Squids Servers hingegen lag nur bei 7%. Der ausgehendem Traffic wurde im Verhältnis 5 zu 1 vom Proxy beantwortet.

Squid konfigurieren:

Unter SuSE finden Sie die squid.conf unter /etc/squd/.

  • http_port: Mit dieser Option stellen Sie ein, auf welchem Port und welcher IP-Adresse der Squid auf eingehende Verbindungen hört. http_port 192.168.100.100:80
  • cache_mem: Mit dieser Option legen Sie den zu verwendenden Hauptspeicher fest. Ein Server mit 2GB RAM kann bis zu 1,8 GB für den Squid abstellen (cache_men 1800 MB).
  • maximum_object_size und maximum_object_size_in_memory: Diese beiden Optionen geben an, wie groß ein Objekt maximal sein darf, damit es überhaupt gecached wird, und wie groß ein Objekt maximal sein darf, damit Squid es im Hauptspeicher hält. Diese Werte sind natürlich vom Auftritt abhängig. Untersuchen Sie Ihre Website daraufhin, wie groß 90 bis 95 Prozent aller Objekte sind – und verwenden diesen Wert dann als Schwellenwert für die Optionen.
  • cache_dir: Mit dieser Option geben Sie die Größe und die Lage des Cache-Verzeichnisses an. Soll nur der RAM verwendet werden muss die Größe von 0 angegeben werden.
  • Zugriffskontrolle (ACL): acl Safe_methods method GET HEAD PUT POST CONNECT
    acl Safe_ports port 80
    http_access deny !Safe_ports
    http_access deny !Safe_methods

Die Reverse-Proxy-Optionen:

httpd_accel_port: Diese Option ist nicht zu verwechseln mit “http_port” und legt den Port fest, auf dem der zu cachende Webserver betrieben wird. Normalerweise werden Webserver auf Port 80 betrieben. Wenn Sie aber den Webserver zum Beispiel auf dem gleichen Rechner wie den Squid betreiben, dann muss der Webserver natürlich auf einen anderen als Port 80 horchen. Dieser wird ja bereits durch Squid belegt.

httpd_accel_host: Dieser Parameter bestimmt die IP-Adresse des zu cachenden Webservers.

httpd_accel_single_host on: Soll Squid nur einen einzelnen Webserver cachen, benötigen Sie diese Konfigurationszeile. Für einen Einsatz als Reverse-Proxy für das eigene Webangebot ist das genau die richtige Einstellung.

Ausschließen von Webseiten oder Verzeichnissen. Hierfür gibt es die Option hierarchy_stoplist. Diese enthält beliebig viele Strings als Parameter. Taucht in einer Client-Anfrage einer der Strings auf, dann wird die Anfrage direkt an den Webserver weitergegeben und die Antwort nicht zwischengespeichert. Wenn Sie also beispielsweise die Verzeichnisse admin und cms auf dem Webserver haben, deren Inhalte nicht gespeichert werden sollen, dann lautet der benötigte Eintrag:

hierarchy_stoplist admin cms

Cache-Attribute im Webserver:

Damit Squid also effizient arbeiten kann, muss der Webserver die Objekte mit passenden Haltbarkeitsinformationen ausstatten. Ein vom Webserver ausgeliefertes Objekt kann in seinem HTTP-Header vier Tags enthalten, die das Caching steuern: “Last-Modified”, “Expires”, “Cache-Control” und “Pragma”.

Caching für Apache festlegen

ExpiresActive On
ExpiresByType image/gif “modification plus 7200 days”

ExpiresByType können Sie natürlich mehrfach verwenden. Um innerhalb eines Containers eine Haltbarkeit zu spezifizieren, verwenden Sie ExpiresDefault. Die Auszeichnung enthält als Parameter einen String, der die Haltbarkeit bestimmt. Um beispielsweise eine Haltbarkeit von etwa zehn Jahren nach der letzten Veränderung des Objekts anzugeben, verwenden Sie:

<Directory “/images”>
ExpiresDefault “modification plus 3600 days”
</Directory>

PHP und Co

Es ist auch möglich die benötigten Werte (“Last-Modified”, “Expires”, “Cache-Control”) dynamisch zu setzen.

Drucken PDF

Switch to our mobile site