Antwort-Cache von Velocity
Diese Seite ist für Systemadministratoren und Support-Mitarbeitende bei Hosting-Anbietern, deren Kunden-Websites auf Velocity laufen. Sie beantwortet: was der Antwort-Cache speichert, welche Einstellungen entscheiden, wie frisch Seiten sind, wie Sie prüfen, dass er funktioniert, wie Sie ihn leeren und was Sie einem Kunden sagen, der eine alte Seite sieht. Die Quellen sind Kapitel 8, Abschnitt 8.3.8, Antwort-Cache von Velocity und Der Antwort-Cache, und dem Netzwerk aus dem Weg gehen.
Inhalt
- Was er tut
- Was er nie speichert
- Die Einstellungen
- Frische gegen Geschwindigkeit
- Ihn prüfen
- Ihn leeren
- Der Navigations-Cache im Browser
- Antworten für den Support
- Checkliste
Was er tut
Der Antwort-Cache hält gerenderte anonyme Seiten und beantwortet wiederholte Anfragen innerhalb des Serverprozesses, bevor ein Worker gewählt wird: kein Fork, kein PHP, keine Datenbank. Gemessen auf einem Host mit 12 Kernen, eine zwischengespeicherte Startseite über TLS mit gzip: etwa 2.950 Seiten pro Sekunde von einem Server, 11.985 von vier Servern auf einem Port (Antwort-Cache von Velocity). Er verhält sich wie ein kleiner Reverse Proxy:
- bedingte Anfragen werden mit
304beantwortet, mit einemETag, das aus der Seite abgeleitet ist, nicht aus der Uhr, sodass eine unveränderte Seite einen wiederkehrenden Browser 202 Byte Header kostet statt des ganzen Dokuments; - stale-while-revalidate: Eine Anfrage rendert eine abgelaufene Seite, während die anderen die alte Kopie bekommen;
Datebei jeder Antwort,AgeundX-Cachebei zwischengespeicherten;- kleine Einträge in APCu (von den Workern geteilt), größere auf der Festplatte in
var/cache/qbix-reverse.
Was er nie speichert
Aus Kapitel 8 und der Seite der Funktion:
- angemeldete Besucher werden nie daraus bedient; eine Seite mit einem Formular-Token wird
privategesendet; - eine Anfrage mit einem Cookie, das in
SkipCookiesgenannt ist (leer bedeutet das Sitzungscookie undis_logged_in, das der Kernel genau für diesen Zweck für angemeldete Besucher setzt), oder mit einem HeaderAuthorization; - eine Antwort, die ein Cookie setzt oder
no-storeoderprivatesagt; - alles außer
GET, und die eigenen Pfade des Servers/Q/und/.well-known/; - ein anderer Status als 200 (ein 404 nur, wenn
NotFoundSecondsüber 0 liegt).
Warnung Der Antwort-Cache braucht qbix-webserver 0.0.4.26 oder später: Ältere Versionen erkannten das Sitzungscookie nur an seinem genauen Namen, erkannten das Sitzungscookie pro Siteaccess nie und lieferten die Seiten eines angemeldeten Besuchers an alle aus (
settings/velocity.ini). Halten Sie die Engine aktuell (Velocity für Hoster).
Die Einstellungen
settings/velocity.ini, [CacheSettings] (überschrieben in settings/override/velocity.ini.append.php, dann neu starten):
| Einstellung | Mitgeliefert | Bedeutung |
|---|---|---|
Enabled | enabled | der Cache ist an |
DefaultTtl | 30 | Sekunden, die eine anonyme Seite behalten wird, wenn sie keine eigene Lebensdauer mitbringt |
Dir | var/cache/qbix-reverse | Festplattenstufe für Einträge, die zu groß für den gemeinsamen Speicher sind |
APCu, APCuMaxSize | enabled, 0 | kleine Einträge in APCu; 0 belässt die 65536 Byte des Servers |
SkipCookies | leer | Cookies, die „persönlich, nicht zwischenspeichern“ bedeuten; eine Liste ersetzt den Standard |
StaleWhileRevalidate | 60 | Sekunden, die eine abgelaufene Seite noch ausgeliefert wird, während eine Anfrage ihren Ersatz rendert |
NotFoundSeconds | 0 | Sekunden, die ein 404 gemerkt wird; 0 schickt jedes 404 an PHP |
HonorRequestNoCache | enabled | eine Anfrage mit Cache-Control: no-cache erreicht PHP, und ihre Antwort wird erneut gespeichert |
SweepEvery, SweepMaxAge | 300, 86400 | abgelaufene Einträge von der Festplatte räumen |
FileMode, DirMode | 0640, 0750 | nichts anderes auf der Maschine muss eine zwischengespeicherte Seite lesen |
MinifyHtml | enabled | gespeicherte Seiten ohne Einrückung der Templates (27 % kleinere Dokumente) |
MiddleOutCompression | disabled | gemessen und ausgeschaltet gelassen |
Frische gegen Geschwindigkeit
| Einstellung | Erhöhen Sie sie, und | Senken Sie sie, und |
|---|---|---|
DefaultTtl | mehr Seiten kommen aus dem Cache; ein Besucher sieht nach einer Bearbeitung vielleicht eine Seite, die bis zu so alt ist | frischere Seiten, mehr Renderings |
StaleWhileRevalidate | ein Ablauf schickt nie alle Besucher gleichzeitig an PHP | eine abgelaufene, viel besuchte Seite kann eine Häufung von Renderings bringen |
NotFoundSeconds | ein Crawler, der tote Links abläuft, rendert nicht jeden einzelnen | jedes 404 erreicht PHP, sodass 404.log und der Request-Klassifizierer (security.log) jedes sehen |
Das mitgelieferte NotFoundSeconds=0 ist eine bewusste Wahl: Ein aus dem Cache beantwortetes 404 tauchte in den Logs höchstens einmal
pro Minute auf. Für einen Hoster, dessen Sicherheitsüberwachung diese Logs liest, bleibt es bei 0.
Die Abwägung, die die Datei für DefaultTtl nennt: Eine Seite, die sich zwischen anonymen Besuchern unterscheidet, ohne dass ein Cookie
sie unterscheidet, würde zwischen ihnen geteilt. Ein Kunde, der anonyme Seiten durch etwas anderes als ein Cookie personalisiert, braucht
DefaultTtl=0 (nur Seiten, die ihre eigene Lebensdauer mitbringen, werden zwischengespeichert).
Ihn prüfen
Fragen Sie dieselbe anonyme Seite zweimal an; die zweite Antwort trägt X-Cache: HIT und einen Header Age:
curl -sI https://example.com/ | grep -iE 'x-cache|age'
curl -sI https://example.com/ | grep -iE 'x-cache|age'
php bin/php/console exp:velocity cache stats # where it is, how much it holds, when it was cleared/Q/health (volle Kennzahlen brauchen Zugang als Administrator) meldet hits, misses, hitRate, stale und woher die Treffer
kamen. Überwiegend disk bei eingeschaltetem APCu bedeutet, dass APCu seinen Teil nicht leistet: Prüfen Sie apc.enable_cli, das
Velocity für den Serverprozess setzt. Der Reiter Cache des Kontrollzentrums zeigt die aktuelle Trefferquote und kann nach URL oder
Muster leeren.
Ihn leeren
php bin/php/console exp:velocity cache clear --apply # every cached page is rendered again on its next request- Nach einer Änderung an Template oder Stylesheet: Leeren Sie die Template-Caches, dann
exp:velocity cache clear; kein Neustart nötig. - Nach einer Änderung an PHP:
exp:velocity deploy, das den Antwort-Cache zuletzt leert, nachdem der neue Code läuft. - Das Leeren funktioniert über eine Generationsmarkierung: Jeder Eintrag, der zu oder vor ihrem Zeitpunkt gespeichert wurde, gilt als Fehlschlag, und jeder Worker und jede Instanz, die das Verzeichnis teilt, sieht das innerhalb einer Sekunde.
- Setup > Caches hat eine Schaltfläche Antwort-Cache von Velocity leeren in der Gruppe „Seiten, Abfragen und der Server“.
Der Navigations-Cache im Browser
Unter Velocity kann ein Service Worker (/index.js; /sw.js lädt ihn für ältere Registrierungen) Navigationen zu Seiten derselben
Herkunft aus dem eigenen Browser des Besuchers beantworten und sie im Hintergrund auffrischen. Er speichert nie eine Seite, die mit
einem Sitzungscookie abgerufen wurde, keine Antwort außer 200 und nicht /admin, /user, /explayouts_ui und /api. Die Folge für
den Support: Eine veröffentlichte Änderung erscheint beim zweiten Aufruf, nicht beim ersten. Der Notschalter ist, index.js als
self.registration.unregister() auszuliefern; jeder Browser verwirft ihn innerhalb von 24 Stunden
(Der Antwort-Cache, und dem Netzwerk aus dem Weg gehen).
Antworten für den Support
| Der Kunde sagt | Prüfen | Antwort |
|---|---|---|
| „Meine Bearbeitung erscheint für Besucher nicht“ | X-Cache: HIT und Age | sie erscheint innerhalb von DefaultTtl Sekunden oder nach exp:velocity cache clear; mit dem Navigations-Cache beim zweiten Aufruf |
| „Angemeldete Benutzer sehen die alte Seite“ | nicht der Antwort-Cache | angemeldete Besucher bekommen ihn nie; sehen Sie sich den View-Cache oder den HTTP-Cache an |
| „Eine 404-Seite erscheint nur manchmal in unseren Logs“ | NotFoundSeconds | über 0 erreichen zwischengespeicherte 404 PHP nicht |
| „Die Website ist nach einem Ausrollen langsam“ | der Cache wurde geleert | wärmen Sie ihn vor (Caches leeren und vorwärmen) |
Checkliste
- To do: Engine auf 0.0.4.26 oder später (in der Praxis die empfohlene 0.0.4.44 oder später).
- To do:
DefaultTtlmit dem Kunden vereinbart;NotFoundSecondsbleibt auf 0, wo Logs überwacht werden. - To do: Zwei Anfragen zeigen
X-Cache: HIT; APCu für den Serverprozess eingeschaltet. - To do: Ausrollen leert den Antwort-Cache zuletzt (
exp:velocity deploytut das). - To do: Der Support kennt das Verhalten des Navigations-Caches beim „zweiten Aufruf“.
Verwandte Seiten
- Cache-Schichten
- Caches leeren und vorwärmen
- Velocity für Hoster
- Antwort-Cache von Velocity
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
Werden Sie Exponential-Partner
Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.