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 DirektiveMMapFile
verwenden. 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 DirektiveAuthnCacheSOCache
hinzu. 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.conf
verwenden. 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_cache
verfü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_socache
wird 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_cache
owie 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_PATH
an 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/tmp
ein. 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-Cookie
zu 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-Cookie
wird 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 DirektiveCacheEnable
tun. 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 BefehlCacheEnable
angeben müssen. Jeder URI, der von diesem Speicherort aus bereitgestellt wird, wird zwischengespeichert. Wir werden auch die DirektiveCacheHeader
aktivieren, 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 vonExpires
in Zukunft auf fünf Minuten undCache-Control max-age=300
gesetzt. Um unsere Caching-Richtlinie weiter zu verfeinern, können wir die DirektiveHeader
verwenden. Wir können die Optionmerge
verwenden, um zusätzliche Optionen vonCache-Control
hinzuzufü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.