Die Per­for­mance zählt längst zu den wich­tigs­ten Ei­gen­schaf­ten einer guten Website. Lange La­de­zei­ten führen nach­weis­lich dazu, dass Besucher Ihrer Seite den Rücken zukehren, ohne sich zuvor von der Qualität der Inhalte überzeugt zu haben. Als Kom­po­nen­te moderner User-Ex­pe­ri­ence zählt der Pagespeed außerdem bereits seit 2010 auch zu den Ran­king­fak­to­ren von Google. Website-Betreiber sollten sich folglich unbedingt mit diesem Thema aus­ein­an­der­set­zen und die Ge­schwin­dig­keit ihres Projekts op­ti­mie­ren. Sie haben u. a. die Mög­lich­keit, Bilder zu kom­pri­mie­ren, Code-Dateien zu­sam­men­zu­fas­sen und zu op­ti­mie­ren oder die Anzahl der Anfragen zu mi­ni­mie­ren.

Ein weiterer Ansatz, mit dem Sie Ihren Webserver ganz gezielt entlasten, ist die Nutzung eines Reverse-Proxy-Servers. Diese Software-Kom­po­nen­te dient als Schnitt­stel­le zwischen Browser und Webserver, indem sie stell­ver­tre­tend die Brow­ser­an­fra­gen be­ar­bei­tet und zwi­schen­ge­spei­cher­te statische Inhalte ei­gen­stän­dig aus­lie­fert, ohne den Webserver zu kon­tak­tie­ren. Das ist besonders effektiv, wenn der Server die Seite im CMS zwar jedes Mal dynamisch erstellt, sie sich aber nicht ständig ändert. Zu den be­lieb­tes­ten Lösungen, um einen solchen Cache-Proxy zu rea­li­sie­ren, zählt das freie Programm Squid.

Was ist Squid?

Squid ist eine Proxy-Server-Software, die Duane Wessels 1998 als freie Ab­spal­tung des „Harvest object cache“ ver­öf­fent­lich­te. Parallel dazu erschien auch eine kom­mer­zi­el­le Version unter dem Namen NetCache, deren Wei­ter­ent­wick­lung al­ler­dings mitt­ler­wei­le ein­ge­stellt ist. Squid ist unter der GNU General Public License frei­ge­ge­ben und un­ter­stützt u. a. die Pro­to­kol­le HTTP, HTTP/2, HTTPS und FTP. Squid-Proxy-Server laufen auf den meisten gängigen Be­triebs­sys­te­men wie diversen Linux-Dis­tri­bu­tio­nen, Mac OS X oder Windows. Die Bedienung funk­tio­niert entweder klassisch über das ent­spre­chen­de Kom­man­do­zei­len-Tool oder über eine grafische Ober­flä­che wie GAdmin-SQUID oder SquidMan.

Tausende Website-Betreiber machen von den Caching-Mög­lich­kei­ten des Open-Source-Proxys Gebrauch. Wikipedia z. B. nutzte jahrelang mehrere Squid-Proxys zur Aus­lie­fe­rung der Inhalte, um Datenbank- und Webserver zu entlasten. Darüber hinaus kann Squid dank der Un­ter­stüt­zung von HTTPS auch den Aufbau ge­si­cher­ter SSL-Ver­bin­dun­gen über­neh­men. Außerdem setzen diverse Internet-Provider weltweit Squid als trans­pa­ren­ten Proxy ein, um für eine Op­ti­mie­rung des In­ter­net­zu­gangs zu sorgen. Natürlich können Sie die Open-Source-Software auch dazu verwenden, einen ge­wöhn­li­chen Forward-Proxy für einen einzelnen Client zu betreiben und damit die eigene IP-Adresse zu verbergen und einen zu­sätz­li­chen Schutz zur Pa­ket­fil­te­rung der Firewall zu erhalten. Al­ter­na­tiv kann Squid mit der Er­wei­te­rung Squid­Guard auch ei­gen­stän­dig Pakete filtern.

Warum Sie einen Squid-Proxy-Server einsetzen sollten

Squid ist seit der ersten Version ein Open-Source-Produkt, weshalb keinerlei Li­zenz­kos­ten anfallen und der Quelltext frei verfügbar ist. Sie können die Software also nicht nur kos­ten­frei her­un­ter­la­den, sondern auch an Ihre Be­dürf­nis­se anpassen. Notwendig wird das al­ler­dings nur in den sel­tens­ten Fällen sein: Die jahr­zehn­te­lan­ge Erfahrung der Mit­ar­bei­ter des Squid-Projekts, die das Proxy-Programm auf frei­wil­li­ger Basis betreuen und wei­ter­ent­wi­ckeln, zeigt sich deutlich in der Viel­sei­tig­keit und der Ge­schwin­dig­keits­op­ti­mie­rung, die Squid bietet. Auch im privaten Einsatz macht die Software dank de­fi­nier­ba­rer Zugriffs-Kontroll-Listen (Access Control Lists) eine gute Figur. Ei­ner­seits kann der Zugriff auf bestimmte Inhalte gesperrt oder die nutzbare Band­brei­te ein­ge­schränkt werden, an­de­rer­seits können Sie die Log-Files des ein­ge­setz­ten Proxys pro­blem­los ana­ly­sie­ren, um den Da­ten­ver­kehr zu kon­trol­lie­ren.

Ein wichtiges Merkmal von Squid ist außerdem die hohe Fle­xi­bi­li­tät, die sich vor allem in größeren, komplexen Netz­wer­ken bezahlt macht. So ist es z. B. möglich, einen Cache-Proxy-Verbund auf­zu­bau­en, indem Sie auf mehrere Squid-Proxys zu­rück­grei­fen und die Anfragen auf selbige verteilen. Dieser Verbund entlastet die einzelnen Kom­po­nen­ten und erhöht die Aus­fall­si­cher­heit enorm. Wie in einem Content Delivery Network können sich dabei die einzelnen Reverse-Proxy-Server an mehreren Stand­or­ten befinden.

So funk­tio­niert das Caching-Verhalten der Proxy-Software

Die auf­ge­zähl­ten Si­cher­heits- und Kon­troll­funk­tio­nen, die Sie rea­li­sie­ren können, ver­deut­li­chen die Viel­sei­tig­keit der Open-Source-Software. In erster Linie überzeugt Squid al­ler­dings in seiner Kern­funk­ti­on als Proxy-Server zum Zwi­schen­spei­chern von Daten. Um deren Ak­tua­li­tät und Ver­füg­bar­keit zu ge­währ­leis­ten, berechnet Squid ihren Status re­gel­mä­ßig, wobei zwei Er­geb­nis­se möglich sind: Das über­prüf­te Objekt kann entweder immer noch aktuell (fresh) oder ab­ge­lau­fen (stale) sein. Damit nicht immer der komplette Datensatz kon­trol­liert werden muss, errechnet ein Al­go­rith­mus für jedes einzelne Objekt, wie oft eine Ve­ri­fi­zie­rung notwendig ist. Dabei fließen folgende In­for­ma­tio­nen in die Bewertung ein:

LM last modified; Header-In­for­ma­ti­on, die das Datum der letzten Änderung verrät
EX expire; Header-In­for­ma­ti­on, die das Ab­lauf­da­tum eines Objekts verrät
NOW das aktuelle Datum
OBJ_Date Spei­che­rungs­da­tum im Squid-Cache bzw. Datum der letzten Änderung
MIN Min­dest­halt­bar­keit im Zwi­schen­spei­cher
MAX maximale Halt­bar­keit im Zwi­schen­spei­cher
PERCENT Halt­bar­keits­fak­tor
Obj_Age be­schreibt die Zeit, seit der ein Objekt im Cache ist (NOW - OBJ_Date)
LM_Age Alter eines Objekts zum Zeitpunkt des Zwi­schen­spei­cherns (OBJ_Date - LM)
LM_FACTOR Al­ters­fak­tor (Obj_Age / LM_Age)

Bis zum Zeitpunkt X gilt ein Objekt im Cache. Die ent­spre­chen­de Formel zur Be­rech­nung lautet:

X = OBJ_Date + (LM_Age * PERCENT)

Auf www.squid-handbuch.de (Punkt 4.3 Cache-Verhalten von Squid) findet man eine Abbildung, die den Caching-Al­go­rith­mus ver­an­schau­licht. Ver­ein­facht aus­ge­drückt bewirkt der Al­go­rith­mus Folgendes: Der Squid-Proxy-Server kon­trol­liert den Status eines Objekts häufiger, wenn das Objekt selbst häufiger Ver­än­de­run­gen erfährt. Der früheste Über­prü­fungs­zeit­punkt ist dabei MIN, also die zu­ge­ord­ne­te Min­dest­halt­bar­keit im Cache. Spä­tes­tens, wenn das maximale Halt­bar­keits­da­tum MAX erreicht ist, muss Squid den Webserver in jedem Fall kon­tak­tie­ren. Dazu sendet die Proxy-Software eine GET-Anfrage mit If-Modified-Since-Angabe inklusive der OBJ_DATE-Auskunft. Der Webserver ve­ri­fi­ziert den Status des Objekts und schickt entweder

  • den Sta­tus­code 304 (not modified), wenn das Objekt un­ver­än­dert ist,
  • oder den Sta­tus­code 200 (OK) sowie das neue, ver­än­der­te Objekt zurück.

So werden Daten nur dann neu über­tra­gen, wenn sich tat­säch­lich etwas verändert hat.

Welche Hardware-An­for­de­run­gen stellt Squid?

Wenn Sie einen Squid-Reverse-Proxy für Ihren Webserver nutzen wollen, sollten Sie zunächst si­cher­ge­hen, dass Sie die not­wen­di­gen Hardware-Struk­tu­ren verfügbar haben. Ein Caching-Proxy stellt keine be­son­de­ren An­for­de­run­gen an die Pro­zes­sor­leis­tung, sondern setzt prin­zi­pi­ell nur die passende Größe von Arbeits- und Fest­plat­ten­spei­cher voraus. Beide Kom­po­nen­ten sind heut­zu­ta­ge sehr er­schwing­lich, weshalb die Be­schaf­fung weniger eine Frage des Preises als vielmehr eine Frage der richtigen Kal­ku­la­ti­on ist. Berechnen Sie Ihren Bedarf in Relation zu Ihrem Web­pro­jekt und lassen Sie dabei auch das po­ten­zi­el­le Wachstum ein­flie­ßen. Setzen Sie beim Kauf der Hardware auf moderne Kom­po­nen­ten wie SSD-Speicher, die sich durch eine schnelle Zu­griffs­zeit aus­zeich­nen und damit auch die best­mög­li­che Ge­schwin­dig­keits­op­ti­mie­rung Ihrer Website er­mög­li­chen.

Squid in­stal­lie­ren – so funk­tio­niert’s

Sie haben in der Regel zwei Mög­lich­kei­ten, die Squid-Software auf Ihrem System zu in­stal­lie­ren. Die erste Variante setzt voraus, dass sich Squid in der Pa­ket­ver­wal­tung Ihrer ver­wen­de­ten Dis­tri­bu­ti­on befindet. Ist dies der Fall, gelingt die In­stal­la­ti­on des Proxy-Programms nach dem bekannten Muster über die Kom­man­do­zei­le. Unter Ubuntu lautet der ent­spre­chen­de Befehl z. B.:

sudo apt-get update
sudo apt-get install squid

Der zweite In­stal­la­ti­ons­weg führt über den Download der In­stal­la­ti­ons­da­tei­en. Diese entpacken und kom­pi­lie­ren Sie ebenfalls auf dem gängigen Weg (im Beispiel Version 3.5.20):

tar xzf squid-3.5.20.tar.gz
cd squid-3.5.20
./configure
make

Mit dem Befehl

make install

starten Sie an­schlie­ßend die In­stal­la­ti­on. Seit Version 3.5 gibt es für Windows-Systeme (64-Bit) ein in­of­fi­zi­el­les vor­ge­fer­tig­tes MSI-In­stal­la­ti­ons­pa­ket, das Sie nach dem Download einfach per Dop­pel­klick ausführen können. Zu jeder ver­öf­fent­lich­ten Stable-Version exis­tie­ren außerdem auch eine Beta- sowie eine De­ve­lo­p­ment-Version, die neue Features enthalten. Beide Versionen dienen aber in erster Linie dem Test dieser Funk­tio­nen, weshalb Sie nur darauf zu­rück­grei­fen sollten, wenn Sie sich gut mit der Squid-Software auskennen.

So kon­fi­gu­rie­ren Sie Ihren Squid-Proxy-Server zur Website-Be­schleu­ni­gung

Als welche Art von Proxy Squid fungieren soll, de­fi­nie­ren Sie in der Kon­fi­gu­ra­ti­ons­da­tei squid.conf. Sie finden diese stan­dard­mä­ßig unter /etc oder /usr/local/squid/etc/ bzw. in dem Ver­zeich­nis, das Sie bei der In­stal­la­ti­on bestimmt haben. Es exis­tie­ren bereits diverse vor­de­fi­nier­te Ein­stel­lun­gen, die per Kom­men­tar­zei­len, die jeweils mit dem Rau­te­zei­chen (#) beginnen, ge­kenn­zeich­net sind. In den folgenden Ab­schnit­ten haben wir die ent­schei­den­den Optionen, die Sie benötigen, um Squid ein­zu­rich­ten, zu­sam­men­ge­fasst.

Netz­werk­op­tio­nen: # NETWORK OPTIONS

In diesem Bereich kon­fi­gu­rie­ren Sie IP-Adressen und Ports, die für den Betrieb des Squid-Servers relevant sind. Folgende Einträge sind für den Cache-Proxy relevant: http_port Syntax: http_port [Hostname oder IP-Adresse:]Port­num­mer Be­schrei­bung: Definiert den Port, auf dem Squid auf die HTTP-Anfragen der Clients lauscht. Stan­dard­mä­ßig ist Port 3128 angegeben. Werden weder Hostname, noch IP-Adresse angegeben, gelten die Ein­stel­lun­gen für alle ein­ge­bun­de­nen IP-Adressen. Auch die Angabe mehrerer Ports ist möglich. Beispiel: http_port 192.168.0.1:3128 https_port Syntax: https_port [IP-Adresse:]Port­num­mer cert=Pfad zum SSL-Zer­ti­fi­kat [key=Pfad zum privaten SSL-Schlüssel] [options] Be­schrei­bung: Die Angabe des HTTPS-Ports ist er­for­der­lich, wenn der Squid-Proxy selbst SSL- bzw. TLS-Ver­bin­dun­gen ent­ge­gen­neh­men muss. Die Angabe des Pfades zum ver­wen­de­ten Zer­ti­fi­kat (im PEM-Format) ist zwingend er­for­der­lich. Geben Sie keinen privaten SSL-Key an, geht Squid au­to­ma­tisch davon aus, dass die PEM-Datei den privaten Schlüssel bereits enthält. Mit dem Parameter options können Sie zu­sätz­li­che Optionen ent­spre­chend der OpenSSL-Do­ku­men­ta­ti­on angeben. icp_port Syntax: icp_port Port­num­mer Be­schrei­bung: Hier geben Sie den Port an, über den Squid ICP-Anfragen (Internet Cache Protocol) ent­ge­gen­nimmt bzw. UDP-Pakete empfängt. Eine Angabe ist nur notwendig, wenn Sie mehrere Proxys nutzen, die mit­ein­an­der kom­mu­ni­zie­ren sollen. Der Standard-Port ist 3130; zum Ab­schal­ten der Funktion können Sie den Parameter 0 angegeben. Beispiel: icp_port 3130

Caching-Optionen: # OPTIONS WHICH AFFECT THE CACHE SIZE

In den Caching-Optionen legen Sie u. a. fest, ob bzw. wie viel Ar­beits­spei­cher Ihr Squid-Proxy zu Caching-Zwecken in Anspruch nimmt, oder de­fi­nie­ren die minimale und maximale Ob­jekt­grö­ße und das all­ge­mei­ne Caching-Verhalten.

cache_mem

Syntax: cache_mem Ar­beits­spei­cher in MB

Be­schrei­bung: Mit cache_mem bestimmen Sie die Größe des re­ser­vier­ten Haupt­spei­chers für Durch­gangs­ob­jek­te (In-Transit Objects), ständig an­ge­frag­te Objekte (Hot Objects) und nicht cachebare Objekte (Negative-Cached Objects). Da diese Daten in Blöcken zu je 4 KB vorliegen, muss auch der hier an­ge­ge­be­ne Wert ein Viel­fa­ches von 4 KB betragen. Ver­wech­seln Sie diese Option nicht mit dem absoluten Spei­cher­be­darf von Squid, der nicht auf diese Weise reguliert wird.

Beispiel: cache_mem 256 MB

maximum_object_size

Syntax: maximum_object_size Ob­jekt­grö­ße in KB/MB

Be­schrei­bung: Dieser Eintrag in­for­miert Squid darüber, bis zu welcher Größe Objekte zwi­schen­ge­spei­chert werden sollen. Die minimale Grö­ßen­be­gren­zung halten Sie mit minimum_object_size fest.

Beispiel: maximum_object_size 4 MB

Angabe von Caching- und Logfile-Ver­zeich­nis: # LOGFILE PATHNAMES AND CACHE DI­REC­TO­RIES

Zu­sätz­lich zu Angaben über Ports und Caching-Verhalten benötigt der Squid-Server In­for­ma­tio­nen darüber, in welches Ver­zeich­nis er die Inhalte und an­fal­len­de Log-Daten zwi­schen­spei­chern soll.

cache_dir

Syntax: cache_dir Ver­zeich­nis­typ Ver­zeich­nis­pfad Spei­cher­platz Ver­zeich­nisan­zahl

Be­schrei­bung: Mit cache_dir de­fi­nie­ren Sie das Caching-Ver­zeich­nis sowie dessen maximale Spei­cher­ka­pa­zi­tät in Megabyte und die Anzahl an Ver­zeich­nis­sen und Un­ter­ver­zeich­nis­sen. Der stan­dard­mä­ßig in­stal­lier­te Ver­zeich­nis­typ ist ufs. Generell ist diese Option aus­ge­schal­tet und muss zunächst aktiviert werden.

Beispiel: cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256

cache_log

Syntax: cache_log Dateipfad

Be­schrei­bung: Bestimmt den Spei­cher­ort der Log-Datei Ihres Squid-Proxy-Servers, die all­ge­mei­ne In­for­ma­tio­nen über das Verhalten der Software auf­zeich­net.

Beispiel: cache_log /usr/local/squid/var/logs/cache.log

Zu­griffs­op­tio­nen: # ACCESS CONTROLS

Ab­schlie­ßend benötigen Sie für die von Squid genutzten Ports klar de­fi­nier­te Zu­griffs­lis­ten. Dabei sind ins­be­son­de­re folgende zwei Parameter ent­schei­dend:

acl

Syntax: acl Lis­ten­na­me Listentyp Argument

Be­schrei­bung: Hier haben Sie die Mög­lich­keit, eine de­tail­lier­te Zu­griffs­lis­te für alle HTTP-, ICP- und TCP-Ver­bin­dun­gen zu erstellen. Für eine genaue Übersicht über Typen und Optionen empfiehlt sich ein Blick in das of­fi­zi­el­le On­line­hand­buch.

Beispiel: acl all src 0.0.0.0

http_access

Syntax: http_acess allow|deny [!]Lis­ten­na­me

Be­schrei­bung: Erlaubt (allow) oder verbietet (deny) den Zugriff auf den HTTP-Port anhand der zuvor de­fi­nier­ten Zu­griffs­lis­te. Mit vor­an­ge­stell­tem Aus­ru­fe­zei­chen gilt die Zuweisung für alle Ver­bin­dun­gen, die nicht zur genannten Liste gehören.

Beispiel: htttp_access deny !SSL_ports

Zum Hauptmenü