So konfigurieren Sie Apache Content Caching unter Ubuntu 14.04

Was ist Caching?

Caching ist eine Methode zur Verbesserung der Serverleistung, indem häufig angeforderte Inhalte so zwischengespeichert werden, dass ein schnellerer Zugriff möglich ist. Dies beschleunigt die Verarbeitung und Lieferung, da einige ressourcenintensive Vorgänge entfallen.

Durch die Erstellung effektiver Caching-Regeln werden für das Caching geeignete Inhalte gespeichert, um die Antwortzeiten zu verkürzen, Ressourcen zu schonen und die Auslastung zu minimieren. Apache bietet eine Vielzahl von Caches, mit denen sich verschiedene Arten von Vorgängen beschleunigen lassen. In diesem Handbuch wird erläutert, wie Sie Apache 2.4 unter Ubuntu 14.04 mit seinen verschiedenen Caching-Modulen konfigurieren.

Weitere Informationen zum Entwickeln allgemeiner Caching-Strategien finden Sie unterthis article.

Eine Einführung in das Caching in Apache

Apache kann Inhalte mit unterschiedlichem Anspruch und Skalierbarkeit zwischenspeichern. Das Projekt unterteilt diese nach der Methode, in der der Inhalt zwischengespeichert wird, in drei Gruppen. Die allgemeine Aufteilung ist:

  • File Caching: Die grundlegendste Caching-Strategie besteht darin, beim Starten des Servers einfach Dateien oder Dateideskriptoren zu öffnen und verfügbar zu halten, um den Zugriff zu beschleunigen.

  • Key-Value Caching: Das Schlüsselwert-Caching wird hauptsächlich für das SSL- und Authentifizierungs-Caching verwendet und verwendet ein gemeinsames Objektmodell, in dem Elemente gespeichert werden können, deren wiederholte Berechnung kostspielig ist.

  • Standard HTTP caching: Dieses System mit drei Zuständen ist der flexibelste und allgemein nützlichste Caching-Mechanismus. Es kann Antworten speichern und nach Ablauf validieren. Dies kann je nach Ihren spezifischen Anforderungen für Leistung oder Flexibilität konfiguriert werden.

Ein kurzer Blick auf die obigen Beschreibungen kann ergeben, dass sich die obigen Methoden teilweise überschneiden, es jedoch auch hilfreich sein kann, mehrere Strategien gleichzeitig zu verwenden. Wenn Sie beispielsweise einen Schlüsselwertspeicher für Ihre SSL-Sitzungen verwenden und einen Standard-HTTP-Cache für Antworten aktivieren, können Sie Ihre Datenquellen erheblich entlasten und viele Inhaltsbereitstellungsvorgänge für Ihre Kunden beschleunigen.

Nachdem Sie alle Caching-Mechanismen von Apache verstanden haben, wollen wir uns diese Systeme genauer ansehen.

Datei-Caching

Gesamtübersicht

  • Primary modules involved:mod_file_cache

  • Main use cases: Speichern von Dateiinhalten oder Dateideskriptoren beim Start des Servers. Dies sind statische Darstellungen, die erst nach einem Neustart des Servers zuverlässig geändert werden können.

  • Features: Einfach, verbessert die Leistung langsamer Dateisysteme

  • Drawbacks: Experimentelle Funktion, reagiert nicht auf Aktualisierungen im Dateisystem, muss sparsam verwendet werden, um den Einschränkungen des Betriebssystems zu entsprechen, kann nur für statische Dateien verwendet werden

Die Details

Dasmod_file_cache-Modul wird hauptsächlich verwendet, um den Dateizugriff auf Servern mit langsamen Dateisystemen zu beschleunigen. Es stehen zwei Konfigurationsanweisungen zur Auswahl, die beide darauf abzielen, den Prozess der Bereitstellung statischer Dateien zu beschleunigen, indem ein Teil der Arbeit beim Start des Servers ausgeführt wird und nicht, wenn die Dateien angefordert werden.

Die DirektiveCacheFile wird verwendet, um den Pfad zu Dateien auf der Festplatte anzugeben, auf die Sie den Zugriff beschleunigen möchten. Wenn Apache gestartet wird, öffnet Apache die angegebenen statischen Dateien und speichert das Datei-Handle im Cache, sodass die Datei nicht geöffnet werden muss, wenn sie angefordert wird. Die Anzahl der Dateien, die auf diese Weise geöffnet werden können, unterliegt den von Ihrem Betriebssystem festgelegten Einschränkungen.

Die AnweisungMMapFile öffnet auch Dateien, wenn Apache zum ersten Mal gestartet wird. MMapFile speichert jedoch den Inhalt der Datei im Speicher und nicht nur den Dateihandler. Dies ermöglicht eine schnellere Leistung für diese Seiten, hat jedoch einige schwerwiegende Einschränkungen. Es werden keine Aufzeichnungen über die Menge des verwendeten Speichers geführt, daher ist es möglich, dass nicht genügend Arbeitsspeicher zur Verfügung steht. Beachten Sie auch, dass untergeordnete Prozesse den zugewiesenen Speicher kopieren, was zu einer schnelleren Ressourcenentleerung führen kann, als Sie ursprünglich erwartet haben. Verwenden Sie diese Anweisung nur sparsam.

Diese Anweisungen werden nur beim Start von Apache ausgewertet. Dies bedeutet, dass Sie sich nicht darauf verlassen können, dass Apache nach dem Start vorgenommene Änderungen aufnimmt. Verwenden Sie diese nur für statische Dateien, die sich während der gesamten Apache-Sitzung nicht ändern. Abhängig davon, wie die Dateien geändert werden, wird der Server möglicherweise über Änderungen informiert. Dies ist jedoch kein erwartetes Verhalten und funktioniert nicht immer ordnungsgemäß. Wenn Änderungen an Dateien vorgenommen werden müssen, die an diese Direktiven übergeben werden, starten Sie Apache neu, nachdem die Änderungen vorgenommen wurden.

So aktivieren Sie das Datei-Caching

Das Zwischenspeichern von Dateien wird vom Modulmod_file_cache bereitgestellt. Um diese Funktionalität nutzen zu können, müssen Sie das Modul aktivieren.

Wenn Sie Ubuntu 14.04 ausführen, wird das Modul installiert, aber deaktiviert, wenn Sie Apache installieren. Sie können das Modul aktivieren, indem Sie Folgendes eingeben:

sudo a2enmod file_cache

Anschließend sollten Sie die Hauptkonfigurationsdatei bearbeiten, um Ihre Dateicaching-Anweisungen einzurichten. Öffnen Sie die Datei, indem Sie Folgendes eingeben:

sudo nano /etc/apache2/apache2.conf

Verwenden Sie die AnweisungCacheFile, um das Zwischenspeichern von Dateihandles einzurichten. Diese Direktive verwendet eine Liste von Dateipfaden, die durch Leerzeichen getrennt sind:

/etc/apache2/apache2.conf

CacheFile /var/www/html/index.html /var/www/html/somefile.index

Wenn der Server neu gestartet wird, öffnet Apache die aufgelisteten Dateien und speichert ihre Dateizugriffsnummern im Cache, um den Zugriff zu beschleunigen.

Wenn Sie stattdessen einige Dateien direkt in den Speicher abbilden möchten, können Sie die DirektiveMMapFileverwenden. Die Syntax entspricht im Wesentlichen der der letzten Direktive, da lediglich eine Liste von Dateipfaden verwendet wird:

/etc/apache2/apache2.conf

MMapFile /var/www/html/index.html /var/www/html/somefile.index

In der Praxis gibt es keinen Grund,bothCacheFile undMMapFile für denselben Dateisatz zu konfigurieren, aber Sie können beide für verschiedene Dateigruppen verwenden.

Wenn Sie fertig sind, können Sie die Dateien speichern und schließen. Überprüfen Sie die Syntax der Konfigurationsdatei, indem Sie Folgendes eingeben:

sudo apachectl configtest

Wenn in der letzten ZeileSyntax OK steht, können Sie Ihre Apache-Instanz sicher neu starten:

sudo service apache2 restart

Apache wird neu gestartet und speichert den Inhalt oder die Handler der Datei zwischen, je nachdem, welche Anweisungen Sie verwendet haben.

Schlüsselwert-Caching

Gesamtübersicht

  • Primary modules involved:mod_socache_dbm,mod_socache_dc,mod_socache_memcache,mod_socache_shmcb

  • Supporting modules involved:mod_authn_socache,mod_ssl

  • Main use cases: Speichern von SSL-Sitzungen oder Authentifizierungsdetails, SSL-Heften

  • Features: Cache für gemeinsam genutzte Objekte zum Speichern komplexer Ressourcen, unterstützt das Zwischenspeichern und Heften von SSL-Sitzungen sowie flexible Backends

  • Drawbacks: hat keine Validierungsmechanismen, muss separate Software für leistungsfähigere / flexiblere Backends konfigurieren, einige Fehler im Code

Die Details

Das Zwischenspeichern von Schlüsselwerten ist komplexer als das Zwischenspeichern von Dateien und bietet gezieltere Vorteile. Der Schlüsselwert-Cache von Apache, der auch als Cache für gemeinsam genutzte Objekte bezeichnet wird, wird hauptsächlich verwendet, um zu vermeiden, dass teure Vorgänge wiederholt werden, die mit dem Einrichten des Inhaltszugriffs eines Clients im Gegensatz zum Inhalt selbst verbunden sind. Insbesondere kann es verwendet werden, um Authentifizierungsdetails, SSL-Sitzungen zwischenzuspeichern und SSL-Heftung bereitzustellen.

Note

[.note] # Derzeit gibt es einige Probleme mit dem Cache-Anbieter für gemeinsam genutzte Objekte vonevery. Verweise auf die Probleme werden unten aufgeführt. Berücksichtigen Sie diese bei der Bewertung, ob diese Funktion aktiviert werden soll.
#

Das eigentliche Caching wird mithilfe eines der Anbieter-Module für das Caching gemeinsam genutzter Objekte durchgeführt. Diese sind:

  • mod_socache_dbm: Dieses Backend verwendet das einfache Datenbankmoduldbm, bei dem es sich um einen dateibasierten Schlüsselwertspeicher handelt, der Hashing und Buckets mit fester Größe verwendet. Dieser Anbieter leidet unter einigen Speicherlecks. In den meisten Fällen wird daher empfohlen, stattdessenmod_socache_shmcb zu verwenden.

  • mod_socache_dc: Dieser Anbieter verwendet die Distcache-Session-Caching-Software. Dieses Projekt wurde seit 2004 nicht aktualisiert und ist für einige Distributionen noch nicht einmal verpackt. Seien Sie also vorsichtig.

  • mod_socache_memcache: Hiermit wird der Memcache-Cache für verteilte Speicherobjekte zum Speichern von Elementen verwendet. Dies ist die beste Option für einen verteilten Cache zwischen mehreren Servern. Derzeit laufen Einträge nicht ordnungsgemäß ab, aber einpatch wurde an den Trunk der Versionskontrolle von Apache festgeschrieben, der das Problem behebt.

  • mod_socache_shmcb: Derzeit ist dies die beste Option für das Zwischenspeichern von Schlüsselwerten. Dies wird in einem zyklischen Puffer im gemeinsam genutzten Speicher zwischengespeichert, der Einträge entfernt, sobald dieser voll wird. Derzeit wird anentries over 11k in size erstickt.

Neben den oben genannten Anbietermodulen sind abhängig von den zwischengespeicherten Objekten zusätzliche Module erforderlich. Zum Beispiel müssen zum Zwischenspeichern von SSL-Sitzungen oder zum Konfigurieren des SSL-Heftensmod_ssl aktiviert werden, wodurch die AnweisungenSSLSessionCache undSSLStaplingCache bereitgestellt werden. Um das Authentifizierungs-Caching einzurichten, muss das Modulmod_authn_socache aktiviert sein, damit die DirektiveAuthnCacheSOCache festgelegt werden kann.

So aktivieren Sie die Schlüsselwert-Zwischenspeicherung

Wenn Sie diese Art von Caching in Apache dennoch konfigurieren möchten, beachten Sie die oben aufgeführten Fehler und Vorsichtsmaßnahmen.

Die Methode zum Einrichten des Schlüsselwert-Caches hängt davon ab, wofür er verwendet wird und welchen Anbieter Sie verwenden. Im Folgenden werden die Grundlagen des Authentifizierungscaches und des SSL-Sitzungscaches erläutert.

Derzeit gibt esa bug with authentication caching, die verhindern, dass Argumente an den Cache-Anbieter übergeben werden. Alle Anbieter, die keine Standardeinstellungen bereitstellen, auf die zurückgegriffen werden kann, haben Probleme.

Authentifizierungs-Caching

Das Zwischenspeichern der Authentifizierung ist hilfreich, wenn Sie eine teure Authentifizierungsmethode wie LDAP oder Datenbankauthentifizierung verwenden. Diese Arten von Vorgängen können sich erheblich auf die Leistung auswirken, wenn das Backend jedes Mal aufgerufen werden muss, wenn eine Authentifizierungsanforderung gestellt wird.

Zum Einrichten der Zwischenspeicherung müssen Sie Ihre vorhandene Authentifizierungskonfiguration ändern (das Einrichten der Authentifizierung wird in diesem Handbuch nicht behandelt). Die Änderungen selbst sind unabhängig von der Back-End-Authentifizierungsmethode weitgehend identisch. Wir werdenmod_socache_shmcb für unsere Demonstration verwenden.

Aktivieren Sie zunächst das Modulauthn_socache und das Anbietermodulmod_socache_shmcb, indem Sie Folgendes eingeben:

sudo a2enmod authn_socache
sudo a2enmod socache_shmcb

Öffnen Sie Ihre Apache-Hauptkonfigurationsdatei, damit Sie dieses gemeinsam genutzte Cache-Backend zur Verwendung mit der Authentifizierung angeben können:

sudo nano /etc/apache2/apache2.conf

Fügen Sie im oberen Bereich der Datei die DirektiveAuthnCacheSOCachehinzu. Geben Sie an, dassshmcb als Anbieter verwendet werden soll. Wenn der zuvor beschriebene Fehler, der das Übergeben von Optionen verhindert, zum Zeitpunkt des Lesens behoben ist, können Sie einen Speicherort und eine Größe für den Cache angeben. Die Anzahl ist in Bytes angegeben, daher ergibt das kommentierte Beispiel einen 512-Kilobyte-Cache:

/etc/apache2/apache2.conf

AuthnCacheSOCache shmcb

# If the bug preventing passed arguments to the provider gets fixed,
# you can customize the location and size like this
#AuthnCacheSOCache shmcb:${APACHE_RUN_DIR}/auth_cache(512000)

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Öffnen Sie als Nächstes Ihre Konfigurationsseite für den virtuellen Host, auf der die Authentifizierung konfiguriert ist. Wir gehen davon aus, dass Sie die virtuelle Hostkonfiguration von000-default.confverwenden. Sie sollten sie jedoch an Ihre Umgebung anpassen:

sudo nano /etc/apache2/sites-enabled/000-default.conf

Ändern Sie an dem Ort, an dem Sie die Authentifizierung konfiguriert haben, den Block, um Caching hinzuzufügen. Insbesondere müssen Sie dieAuthnCacheProvideFor hinzufügen, um anzugeben, welche Authentifizierungsquellen zwischengespeichert werden sollen, ein Cache-Timeout mitAuthnCacheTimeout hinzufügen undsocache zurAuthBasicProvider-Liste vor Ihnen hinzufügen herkömmliche Authentifizierungsmethode. Die Ergebnisse sehen ungefähr so ​​aus:

/etc/apache2/sites-enabled/000-default.conf



    . . .

    
        AuthType Basic
        AuthName "Restricted Files"
        AuthBasicProvider socache file
        AuthUserFile /etc/apache2/.htpasswd
        AuthnCacheProvideFor file
        AuthnCacheTimeout 300
        Require valid-user
    

Das obige Beispiel bezieht sich auf die Dateiauthentifizierung, für die das Zwischenspeichern wahrscheinlich keinen großen Vorteil bietet. Die Implementierung sollte jedoch bei Verwendung anderer Authentifizierungsmethoden sehr ähnlich sein. Der einzige wesentliche Unterschied besteht darin, dass im obigen Beispiel die "Datei" -Spezifikation angegeben ist und stattdessen die andere Authentifizierungsmethode verwendet wird.

Speichern und schließen Sie die Datei. Starten Sie Apache neu, um Ihre Caching-Änderungen zu implementieren:

sudo service apache2 restart

SSL-Sitzungs-Caching

Der Handshake, der zum Herstellen einer SSL-Verbindung ausgeführt werden muss, ist mit erheblichem Overhead verbunden. Das Zwischenspeichern der Sitzungsdaten, um diesen Initialisierungsschritt für weitere Anforderungen zu vermeiden, kann diese Strafe möglicherweise umgehen. Der Shared Object Cache ist dafür der perfekte Ort.

Wenn Sie SSL bereits für Ihren Apache-Server konfiguriert haben, wirdmod_ssl aktiviert. Unter Ubuntu bedeutet dies, dass einessl.conf-Datei in das/etc/apache2/mods-enabled-Verzeichnis verschoben wurde. Das setzt eigentlich schon Caching ein. Im Inneren sehen Sie einige Zeilen wie diese:

/etc/apache2/mods-enabled/ssl.conf

. . .

SSLSessionCache         shmcb:${APACHE_RUN_DIR}/ssl_scache(512000)
SSLSessionCacheTimeout  300

. . .

Dies ist eigentlich genug, um das Sitzungs-Caching einzurichten. Um dies zu testen, können Sie den OpenSSL-Verbindungsclient verwenden. Art:

openssl s_client -connect 127.0.0.1:443 -reconnect -no_ticket | grep Session-ID

Wenn die Sitzungs-ID in allen Ergebnissen gleich ist, funktioniert der Sitzungs-Cache ordnungsgemäß. Drücken Sie STRG-C, um zum Terminal zurückzukehren.

Standard-HTTP-Caching

Gesamtübersicht

  • Primary modules involved:mod_cache

  • Supporting modules involved:mod_cache_disk,mod_cache_socache

  • Main use cases: Zwischenspeichern des allgemeinen Inhalts

  • Features: Kann HTTP-Caching-Header korrekt interpretieren, veraltete Einträge erneut validieren und je nach Bedarf für maximale Geschwindigkeit oder Flexibilität bereitgestellt werden

  • Drawbacks: Kann bei falscher Konfiguration vertrauliche Daten verlieren, muss zusätzliche Module verwenden, um die Caching-Richtlinie korrekt festzulegen

Die Details

Das HTTP-Protokoll unterstützt und stellt die Mechanismen zum Zwischenspeichern von Antworten entlang des gesamten Inhaltszustellungspfads bereit. Jeder Computer, der den Inhalt berührt, kann möglicherweise jedes Element für eine bestimmte Zeitspanne im Cache speichern, abhängig von den Caching-Richtlinien, die an den Ursprüngen des Inhalts festgelegt wurden, und den Caching-Regeln des Computers.

Der Apache-HTTP-Caching-Mechanismus speichert die Antworten gemäß den angezeigten HTTP-Caching-Richtlinien zwischen. Dies ist ein Allzweck-Caching-System, das den gleichen Regeln folgt, denen jeder Vermittlerserver folgen würde, der an der Lieferung beteiligt ist. Dies macht dieses System sehr flexibel und leistungsstark und ermöglicht es Ihnen, die Überschriften zu nutzen, die Sie bereits für Ihre Inhalte festlegen sollten (dies wird im Folgenden beschrieben).

Der HTTP-Cache von Apache wird auch als "Drei-Status-Cache" bezeichnet. Dies liegt daran, dass sich der gespeicherte Inhalt in einem von drei Zuständen befinden kann. Es kann frisch sein, dh es darf Clients ohne weitere Überprüfung bereitgestellt werden, es kann veraltet sein, dh die TTL für den Inhalt ist abgelaufen, oder es kann nicht vorhanden sein, wenn der Inhalt nicht im Cache gefunden wird .

Wenn der Inhalt bei der nächsten Anforderung veraltet ist, kann er vom Cache erneut überprüft werden, indem der Inhalt am Ursprung überprüft wird. Wenn es sich nicht geändert hat, kann es das Aktualisierungsdatum zurücksetzen und den aktuellen Inhalt bereitstellen. Andernfalls ruft es den geänderten Inhalt ab und speichert diesen für die in seiner Caching-Richtlinie festgelegte Zeit.

Modul Übersicht

Die HTTP-Caching-Logik ist über das Modulmod_cacheverfügbar. Das eigentliche Caching erfolgt bei einem der Caching-Anbieter. Normalerweise wird der Cache mit dem Modulmod_cache_disk auf der Festplatte gespeichert. Das Zwischenspeichern gemeinsam genutzter Objekte ist jedoch auch über das Modulmod_cache_socache verfügbar.

Das Modulmod_cache_disk wird auf der Festplatte zwischengespeichert. Dies kann hilfreich sein, wenn Sie Inhalte von einem Remotestandort aus übertragen, aus einem dynamischen Prozess generieren oder nur versuchen, die Dinge durch Zwischenspeichern auf einer schnelleren Festplatte als normalerweise zu beschleunigen wohnt auf. Dies ist der am besten getestete Anbieter und dürfte in den meisten Fällen Ihre erste Wahl sein. Der Cache wird nicht automatisch bereinigt, daher muss gelegentlich ein Tool namenshtcacheclean ausgeführt werden, um den Cache zu verkleinern. Dies kann manuell ausgeführt, als regulärercron-Job eingerichtet oder als Daemon ausgeführt werden.

Das Modulmod_cache_socachewird an einen der gemeinsam genutzten Objektanbieter zwischengespeichert (dieselben, die im letzten Abschnitt erläutert wurden). Dies kann möglicherweise eine bessere Leistung alsmod_cache_disk haben (abhängig davon, welcher gemeinsam genutzte Cache-Anbieter ausgewählt ist). Es ist jedoch viel neuer und stützt sich auf die Anbieter von gemeinsam genutzten Objekten, bei denen die zuvor beschriebenen Fehler aufgetreten sind. Umfassende Tests werden empfohlen, bevor die Optionmod_cache_socache implementiert wird.

HTTP-Cache-Platzierung

Der HTTP-Cache von Apache kann je nach Ihren Anforderungen in zwei verschiedenen Konfigurationen bereitgestellt werden.

WennCacheQuickHandler auf "Ein" gesetzt ist, wird der Cache sehr früh im Anforderungsbearbeitungsprozess überprüft. Wenn Inhalte gefunden werden, werden diese direkt und ohne weitere Bearbeitung bereitgestellt. Dies bedeutet, dass es unglaublich schnell ist, aber es bedeutet auch, dass Prozesse wie die Authentifizierung von Inhalten nicht möglich sind. Wenn sich in Ihrem Cache Inhalte befinden, für die normalerweise eine Authentifizierung oder Zugriffskontrolle erforderlich ist, könnenanyone ohne Authentifizierung darauf zugreifen, wennCacheQuickHandler auf "Ein" gesetzt ist.

Grundsätzlich emuliert dies einen separaten Cache vor Ihrem Webserver. Wenn Ihr Webserver eine bedingte Überprüfung, Authentifizierung oder Autorisierung durchführen muss, geschieht dies nicht. Apache wertet Direktiven nicht einmal innerhalb von<Location> oder<Directory> Blöcken aus. Beachten Sie, dassCacheQuickHandler durchdefault auf "Ein" gesetzt ist!

WennCacheQuickHandler auf "Aus" gesetzt ist, wird der Cache wesentlich später in der Anforderungsverarbeitungssequenz überprüft. Stellen Sie sich diese Konfiguration so vor, dass der Cache zwischen Ihrer Apache-Verarbeitungslogik und Ihrem tatsächlichen Inhalt platziert wird. Auf diese Weise können die herkömmlichen Verarbeitungsanweisungen ausgeführt werden, bevor Inhalte aus dem Cache abgerufen werden. Wenn Sie diese Option auf "Aus" setzen, wird die Verarbeitung von Anforderungen etwas beschleunigt.

So konfigurieren Sie das Standard-HTTP-Caching

Um das Caching zu aktivieren, müssen Sie das Modulmod_cacheowie einen seiner Caching-Anbieter aktivieren. Wie oben erwähnt, istmod_cache_disk gut getestet, daher werden wir uns darauf verlassen.

Aktivieren der Module

Auf einem Ubuntu-System können Sie diese Module aktivieren, indem Sie Folgendes eingeben:

sudo a2enmod cache
sudo a2enmod cache_disk

Dadurch wird die Caching-Funktionalität beim nächsten Neustart des Servers aktiviert.

Sie müssen auch das Paketapache2-utils installieren, das das Dienstprogrammhtcacheclean enthält, mit dem der Cache bei Bedarf gelöscht wird. Sie können dies installieren, indem Sie Folgendes eingeben:

sudo apt-get update
sudo apt-get install apache2-utils

Ändern der globalen Konfiguration

Der größte Teil der Konfiguration für das Caching findet innerhalb einzelner virtueller Hostdefinitionen oder Standortblöcke statt. Durch Aktivieren vonmod_cache_disk wird jedoch auch eine globale Konfiguration aktiviert, mit der einige allgemeine Attribute angegeben werden können. Öffne diese Datei jetzt, um sie dir anzusehen:

sudo nano /etc/apache2/mods-enabled/cache_disk.conf

Wenn die Kommentare entfernt sind, sollte die Datei folgendermaßen aussehen:

/etc/apache2/mods-enabled/cache_disk.conf


    CacheRoot /var/cache/apache2/mod_cache_disk
    CacheDirLevels 2
    CacheDirLength 1

Der WrapperIfModule weist Apache an, sich nur dann um diese Anweisungen zu kümmern, wenn das Modulmod_cache_disk aktiviert ist. Die AnweisungCacheRoot gibt den Speicherort auf der Festplatte an, an dem der Cache verwaltet wird. DieCacheDirLevels undCacheDirLength tragen beide dazu bei, zu definieren, wie die Cache-Verzeichnisstruktur erstellt wird.

Einmd5-Hash der URL, die bereitgestellt wird, wird als Schlüssel zum Speichern der Daten erstellt. Die Daten werden in Verzeichnissen organisiert, die aus den Anfangszeichen jedes Hashs abgeleitet werden. CacheDirLevels gibt die Anzahl der zu erstellenden Unterverzeichnisse an undCacheDirLength gibt an, wie viele Zeichen als Name für jedes Verzeichnis verwendet werden sollen. Ein Hash vonb1946ac92492d2347c6235b4d2611184 mit den oben gezeigten Standardwerten würde also in einer Verzeichnisstruktur vonb/1/946ac92492d2347c6235b4d2611184 abgelegt. Normalerweise müssen Sie diese Werte nicht ändern, aber es ist gut zu wissen, wofür sie verwendet werden.

Note

[.note] # Wenn Sie den Wert vonCacheRootändern möchten, müssen Sie die Datei/etc/default/apache2öffnen und den Wert vonHTCACHECLEAN_PATHan Ihre Auswahl anpassen. Dies wird verwendet, um den Cache in regelmäßigen Abständen zu bereinigen, daher muss er den richtigen Speicherort des Caches haben.
#

Einige andere Werte, die Sie in dieser Datei festlegen können, sindCacheMaxFileSize undCacheMinFileSize, die die Bereiche der Dateigröße in Bytes festlegen, die Apache in den Cache festschreibt, sowieCacheReadSize undCacheReadTime) s, mit dem Sie warten und Inhalte puffern können, bevor Sie sie an den Client senden. Dies kann nützlich sein, wenn sich der Inhalt nicht auf diesem Server befindet.

Ändern des virtuellen Servers

Der größte Teil der Konfiguration für das Caching erfolgt auf einer detaillierteren Ebene, entweder in der Definition des virtuellen Hosts oder in einem bestimmten Standortblock.

Öffnen Sie eine Ihrer virtuellen Hostdateien, um sie zu verfolgen. Wir gehen davon aus, dass Sie die Standarddatei in diesem Handbuch verwenden:

sudo nano /etc/apache2/sites-enabled

Im virtuellen Hostblock können Sie außerhalb eines Standortblocks einige der Caching-Eigenschaften konfigurieren. In diesem Handbuch wird davon ausgegangen, dass wirCacheQuickHandler deaktivieren möchten, damit mehr Verarbeitung erfolgt. Dies ermöglicht uns vollständigere Caching-Regeln.

Wir werden diese Gelegenheit auch nutzen, um die Cache-Sperre zu konfigurieren. Dies ist ein Dateisperrsystem, das Apache beim Einchecken mit dem Inhaltsursprung verwendet, um festzustellen, ob der Inhalt noch gültig ist. Wenn während der Zeit, in der diese Abfrage ausgeführt wird, zusätzliche Anforderungen für denselben Inhalt eingehen, führt dies zu zusätzlichen Anforderungen an die Back-End-Ressource, die zu Lastspitzen führen können.

Durch das Festlegen einer Cachesperre für eine Ressource während der Validierung wird Apache darüber informiert, dass die Ressource gerade aktualisiert wird. Während dieser Zeit kann die veraltete Ressource mit einem Warnungsheader bedient werden, der den Status angibt. Wir richten dies mit einem Cache-Sperrverzeichnis im Ordner/tmpein. Wir erlauben maximal 5 Sekunden, damit eine Sperre als gültig betrachtet wird. Diese Beispiele stammen direkt aus der Apache-Dokumentation und sollten daher für unsere Zwecke gut funktionieren.

Wir werden Apache auch anweisen, die Header vonSet-Cookiezu ignorieren und sie nicht im Cache zu speichern. Auf diese Weise wird verhindert, dass Apache aus Versehen benutzerspezifische Cookies an andere Parteien weitergibt. Der Header vonSet-Cookiewird entfernt, bevor die Header zwischengespeichert werden.

/etc/apache2/sites-enabled/000-default.conf


    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    CacheQuickHandler off

    CacheLock on
    CacheLockPath /tmp/mod_cache-lock
    CacheLockMaxAge 5

    CacheIgnoreHeaders Set-Cookie

Wir müssen das Caching für diesen virtuellen Host noch aktivieren. Wir können dies mit der DirektiveCacheEnabletun. Wenn dies in einem virtuellen Hostblock festgelegt ist, müssen wir die Caching-Methode (disk odersocache) sowie die angeforderten URIs angeben, die zwischengespeichert werden sollen. Um beispielsweise alle Antworten zwischenzuspeichern, kann dies aufCacheEnable disk / festgelegt werden. Wenn Sie jedoch nur Antworten unter dem URI/public zwischenspeichern möchten, können Sie dies aufCacheEnable disk /public festlegen.

Wir werden eine andere Route einschlagen, indem wir unseren Cache innerhalb eines bestimmten Standortblocks aktivieren. Dies bedeutet, dass wir keinen URI-Pfad für den BefehlCacheEnableangeben müssen. Jeder URI, der von diesem Speicherort aus bereitgestellt wird, wird zwischengespeichert. Wir werden auch die DirektiveCacheHeaderaktivieren, damit unsere Antwortheader angeben, ob der Cache zur Bedienung der Anforderung verwendet wurde oder nicht.

Eine weitere Anweisung, die wir festlegen, istCacheDefaultExpire, damit wir einen Ablauf (in Sekunden) festlegen können, wenn weder die ÜberschriftenExpires nochLast-Modified für den Inhalt festgelegt sind. In ähnlicher Weise setzen wirCacheMaxExpire, um die Zeitspanne zu begrenzen, in der Elemente gespeichert werden. Wir setzen dieCacheLastModifiedFactor so, dass Apache ein Ablaufdatum erstellen kann, wenn es einLast-Modified-Datum hat, aber kein Ablaufdatum. Der Faktor wird mit der Zeit seit der Änderung multipliziert, um einen angemessenen Ablauf festzulegen.

/etc/apache2/sites-enabled/000-default.conf


    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    CacheQuickHandler off

    CacheLock on
    CacheLockPath /tmp/mod_cache-lock
    CacheLockMaxAge 5

    CacheIgnoreHeaders Set-Cookie

    
        CacheEnable disk
        CacheHeader on

        CacheDefaultExpire 600
        CacheMaxExpire 86400
        CacheLastModifiedFactor 0.5
    

Speichern und schließen Sie Ihre Datei, wenn Sie alles konfiguriert haben, was Sie benötigen.

Überprüfen Sie Ihre gesamte Konfiguration auf Syntaxfehler, indem Sie Folgendes eingeben:

sudo apachectl configtest

Wenn keine Fehler gemeldet werden, starten Sie Ihren Dienst neu, indem Sie Folgendes eingeben:

sudo service apache2 restart

Festlegen von Ablaufdaten und Zwischenspeichern von Headern für Inhalte

In der obigen Konfiguration haben wir das HTTP-Caching konfiguriert, das auf HTTP-Headern basiert. Keiner der von uns bereitgestellten Inhalte enthält jedoch die HeaderExpires oderCache-Control, die für intelligente Caching-Entscheidungen erforderlich sind. Um diese Header zu setzen, müssen wir einige weitere Module nutzen.

Das Modulmod_expires kann sowohl den HeaderExpires als auch die Optionmax-age im HeaderCache-Control setzen. Dasmod_headers-Modul kann verwendet werden, um spezifischereCache-Control-Optionen hinzuzufügen, um die Caching-Richtlinie weiter zu optimieren.

Wir können diese beiden Module aktivieren, indem wir Folgendes eingeben:

sudo a2enmod expires
sudo a2enmod headers

Nachdem wir diese Module aktiviert haben, können wir unsere virtuelle Host-Datei sofort wieder ändern:

sudo nano /etc/apache2/sites-enabled/000-default.conf

Das Modulmod_expires enthält nur drei Anweisungen. DasExpiresActive aktiviert die Ablaufverarbeitung in einem bestimmten Kontext, indem es auf "Ein" gesetzt wird. Die beiden anderen Richtlinien sind einander sehr ähnlich. Die DirektiveExpiresDefault legt die Standardablaufzeit fest, undExpiresByType legt die Ablaufzeit gemäß dem MIME-Typ des Inhalts fest. Beide setzen dieExpires und dieCache-Control "max-age" auf die richtigen Werte.

Diese beiden Einstellungen können zwei verschiedene Syntaxen annehmen. Das erste ist einfach "A" oder "M", gefolgt von einer Anzahl von Sekunden. Hiermit wird das Ablaufdatum in Bezug auf das letzte Mal gesetzt, an dem auf den Inhalt zugegriffen bzw. dieser geändert wurde. Beispielsweise würden diese beiden Inhalte 30 Sekunden nach dem Zugriff verfallen.

ExpiresDefault A30
ExpireByType text/html A30

Die andere Syntax ermöglicht eine ausführlichere Konfiguration. Sie können andere Einheiten als Sekunden verwenden, die für den Menschen einfacher zu berechnen sind. Es wird auch das vollständige Wort "Zugriff" oder "Änderung" verwendet. Die gesamte Ablaufkonfiguration sollte in Anführungszeichen gesetzt werden:

ExpiresDefault "modification plus 2 weeks 3 days 1 hour"
ExpiresByType text/html "modification plus 2 weeks 3 days 1 hour"

Für unsere Zwecke legen wir lediglich einen Standardablauf fest. Wir beginnen mit einer Einstellung von 5 Minuten, damit ein vertrauter Fehler nicht über einen längeren Zeitraum auf den Computern unserer Kunden gespeichert wird. Wenn wir sicherer sind, dass wir die für unseren Inhalt geeigneten Richtlinien auswählen können, können wir dies auf etwas Aggressiveres einstellen:

/etc/apache2/sites-enabled/000-default.conf


    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    CacheQuickHandler off

    CacheLock on
    CacheLockPath /tmp/mod_cache-lock
    CacheLockMaxAge 5

    CacheIgnoreHeaders Set-Cookie

    
        CacheEnable disk
        CacheHeader on

        CacheDefaultExpire 600
        CacheMaxExpire 86400
        CacheLastModifiedFactor 0.5

        ExpiresActive on
        ExpiresDefault "access plus 5 minutes"
    

Dadurch wird der Header vonExpiresin Zukunft auf fünf Minuten undCache-Control max-age=300 gesetzt. Um unsere Caching-Richtlinie weiter zu verfeinern, können wir die DirektiveHeaderverwenden. Wir können die Optionmergeverwenden, um zusätzliche Optionen vonCache-Controlhinzuzufügen. Sie können dies mehrmals aufrufen und die gewünschten zusätzlichen Richtlinien hinzufügen. Schauen Sie sichthis guide an, um eine Vorstellung von den Caching-Richtlinien zu erhalten, die Sie für Ihre Inhalte festlegen möchten. In unserem Beispiel setzen wir einfach "public", damit andere Caches sicher sein können, dass sie Kopien speichern dürfen.

UmETags für statischen Inhalt auf unserer Website festzulegen (zur Validierung), können wir die DirektiveFileETag verwenden. Dies funktioniert für statische Inhalte. Für dynamisch generierte Inhalte ist Ihre Anwendung dafür verantwortlich,ETags korrekt zu generieren.

Wir verwenden die Direktive, um die Attribute festzulegen, mit denen Apache dieEtag berechnet. Dies könnenINode,MTime,Size oderAll sein, je nachdem, ob wir dieETag ändern möchten, wenn sich dieinode der Datei ändern. Die Änderungszeit, die Größe oder alle oben genannten Änderungen. Sie können mehr als einen Wert angeben und die geerbte Einstellung in untergeordneten Kontexten ändern, indem Sie den neuen Einstellungen+ oder- voranstellen. Für unsere Zwecke verwenden wir einfach "all", damit alle Änderungen registriert werden:

/etc/apache2/sites-enabled/000-default.conf


    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    CacheQuickHandler off

    CacheLock on
    CacheLockPath /tmp/mod_cache-lock
    CacheLockMaxAge 5

    CacheIgnoreHeaders Set-Cookie

    
        CacheEnable disk
        CacheHeader on

        CacheDefaultExpire 600
        CacheMaxExpire 86400
        CacheLastModifiedFactor 0.5

        ExpiresActive on
        ExpiresDefault "access plus 5 minutes"

        Header merge Cache-Control public
        FileETag All
    

Dies fügt "public" (durch ein Komma getrennt) zu dem Wert hinzu, denCache-Control bereits hat, und enthältETag für unseren statischen Inhalt.

Wenn Sie fertig sind, speichern und schließen Sie die Datei. Überprüfen Sie die Syntax Ihrer Änderungen, indem Sie Folgendes eingeben:

sudo apachectl configtest

Wenn keine Fehler gefunden wurden, starten Sie den Dienst neu, um Ihre Caching-Richtlinien zu implementieren:

sudo service apache2 restart

Fazit

Das Konfigurieren des Cachings mit Apache kann aufgrund der Vielzahl der verfügbaren Optionen schwierig erscheinen. Glücklicherweise ist es einfach, einfach anzufangen und dann zu wachsen, wenn Sie mehr Komplexität benötigen. Die meisten Administratoren benötigen nicht alle Cache-Typen.

Beachten Sie beim Konfigurieren des Cachings die spezifischen Probleme, die Sie lösen möchten, um zu vermeiden, dass Sie sich in den verschiedenen Implementierungsoptionen verlieren. Die meisten Benutzer werden davon profitieren, zumindest Header einzurichten. Wenn Sie Inhalte weiterleiten oder generieren, kann das Festlegen eines HTTP-Caches hilfreich sein. Das Zwischenspeichern von gemeinsam genutzten Objekten ist nützlich für bestimmte Aufgaben wie das Speichern von SSL-Sitzungen oder Authentifizierungsdetails, wenn Sie einen Back-End-Anbieter verwenden. Das Zwischenspeichern von Dateien kann wahrscheinlich auf langsame Systeme beschränkt sein.