Benutzerdefinierte Kopfzeilen, die nicht über Dispatcher laufen oder das Caching-Verhalten beeinflussen
Benutzerdefinierte Antwort-Header wie X-Robots-Tag, ETag und benutzerdefinierte Cache-Header verschwinden, wenn eine Seite über die Dispatcher bereitgestellt wird, oder sie unterbrechen das CDN-Caching, wenn eine alte Vary: User-Agent-Anweisung vorhanden ist. Der Dispatcher leitet nur Antwort-Header weiter, die explizit in der /cache/headers- und /headers-Konfiguration aufgeführt sind, und Apache überschreibt einige Header (wie ETag), es sei denn, er wird aufgefordert, sich an AEM zu wenden. Wenn Sie den -Header in der Farm-Konfiguration zulassen, sicherstellen, dass Apache ihn unverändert weiterleitet, die alte Vary: User-Agent-Direktive entfernen und den Cache löschen, werden der richtige Header-Passthrough und das richtige Caching wiederhergestellt.
Beschreibung description
Umgebungen:
- Adobe Experience Manager as a Cloud Service (AEMaaCS)
- AEM Managed Services (AMS)
- Adobe Experience Manager On-Premise-Software
- AEM Dispatcher (Apache) und die CDN-Ebene
Problem/Symptome:
- In der AEM-Veröffentlichungsinstanz ist eine Kopfzeile mit
curl -Isichtbar, in der Dispatcher fehlt sie jedoch. - Das CDN speichert Seiten aufgrund von
Vary: User-Agentnicht zwischen. - Benutzerdefinierte Kopfzeilen werden nur angezeigt, wenn ein Abfrageparameter (
?a=b) hinzugefügt wird, da der Dispatcher den Cache umgeht. - Der
ETaggeht verloren oder wird geändert, z. B. Apache--gzip. - Die Dispatcher gibt veraltete Inhalte zurück, da zwischengespeicherte Kopfzeilen nicht aktualisiert werden.
Grundursache:
Dispatcher leitet nur Antwort-Header weiter, die explizit in /cache/headers und /headers aufgeführt sind. Wenn keine Kopfzeile vorhanden ist, entfernt Dispatcher diese oder verwendet zwischengespeicherte Kopfzeilen-Metadaten. Apache überschreibt Header (z. B. ETag), es sei denn, sie sind so konfiguriert, dass sie auf AEM verweisen. Einige veraltete vhost-Konfigurationen umfassen Header append Vary User-Agent, wodurch das CDN-Caching aufgrund einer übermäßigen Variantenkardinalität unterbrochen wird. Abfragezeichenfolgen-Anfragen umgehen den Cache, wodurch fehlende Kopfzeilen nur in zwischengespeicherten Pfaden angezeigt werden.
Wie kann ich bestätigen
- Stellen Sie fest, ob die Kopfzeile vor oder nach der Dispatcher fehlt. Führen Sie
curl -Isowohl für die Veröffentlichungs- als auch für die Dispatcher-URLs aus und vergleichen Sie die Kopfzeilensätze. Wenn die Kopfzeile auf der Veröffentlichungsinstanz angezeigt wird, auf der Dispatcher jedoch fehlt oder geändert wird, wird sie von Dispatcher oder Apache entfernt. Wenn er bereits in der Veröffentlichungsinstanz fehlt, beheben Sie zuerst den AEM-Code. - Überprüfen Sie, ob der Dispatcher-Cache beteiligt ist. Erneuter Test mit einem Abfrageparameter (
curl -Imit einer URL mit?a=b). Wenn der Header nur mit dem Abfrageparameter angezeigt wird, wird die Ressource aus dem Cache ohne gespeicherte Header-Metadaten bereitgestellt.
Lösung resolution
Führen Sie zur Behebung des Problems folgende Schritte aus:
-
Zulassen, dass der Header in der Farm-Datei zwischengespeichert wird. Fügen Sie in der
.anyder Veröffentlichungsfarm den Header-Namen zum/cache/headershinzu (z. B.:X-Robots-Tag,ETagoderEdge-Cache-Tag). Nachdem ein Neustart durchgeführt und der Cache gelöscht wurde, führen Siecurl -Iaus und bestätigen Sie, dass die Kopfzeile angezeigt wird. -
Stellen Sie sicher, dass Apache den Header weiterleitet, ohne ihn zu überschreiben. Bearbeiten Sie bei AMS und On-Premise den vhost:
- Fügen Sie
ETagFileETag NoneundHeader unset ETaghinzu. - Legen Sie für eine benutzerdefinierte Kopfzeile
SetEnvIfNoCase X-Robots-Tag "(.+)$" X_ROBOTS_TAG=$1undHeader always set X-Robots-Tag "%{X-Robots-Tag}e" env=X_ROBOTS_TAG.
- Fügen Sie
Führen Sie apachectl -t aus, starten Sie den Service neu und bestätigen Sie, curl -I die Kopfzeile angezeigt wird.
3. Lassen Sie die Kopfzeile für die Weiterleitung (nicht für das Caching) in der Farm-Datei zu. Fügen Sie die Kopfzeile zum /headers hinzu, damit die Dispatcher sie an den Client weiterleitet, selbst wenn die Antwort nicht zwischengespeichert wird, und bestätigen Sie dann mit curl -I.
4. Entfernen Sie die alte Vary: User-Agent. Durchsuchen Sie die vhost-Verzeichnisse mit grep -R "Vary User-Agent" . und kommentieren Sie alle gefundenen Instanzen aus, damit das CDN das Zwischenspeichern von Antworten fortsetzt.
5. Löschen Sie den Cache nach den Konfigurationsänderungen. Verwenden Sie auf AEMaaCS Cloud Manager →-Umgebung → Cache löschen. Entfernen Sie auf AMS oder On-Premise die zwischengespeicherten Dateien auf dem <dispatcher_cache_path> oder Trigger einer Aktivierungsflush-Benachrichtigung und starten Sie dann Apache neu. Bestätigen curl -I zeigt die richtige Kopfzeile an.
6. Validieren Sie die Zuordnung von Domain zu Farm. Bestätigen Sie, dass vhost die angeforderte Domain enthält, damit die Dispatcher die richtige Veröffentlichungsfarm mit den Kopfzeilenregeln verwendet. Überprüfen Sie die Dispatcher-Protokolle auf Keine Farm stimmt mit Host überein. Wenn dies angezeigt wird, fügen Sie die Domain zum vhost-ServerName oder ServerAlias hinzu und versuchen Sie es erneut.
Validierung
- Führen Sie
curl -Imit der Dispatcher-URL aus und bestätigen Sie, dass der Header vorhanden ist und mit „Veröffentlichen“ übereinstimmt. - Bestätigen Sie, dass die zwischengespeicherte Metadatendatei (
<path>.headers) im Cache-Verzeichnis von Dispatcher erstellt wurde. - Vergewissern Sie sich, dass keine unbeabsichtigten Kopfzeilen (z. B.
Vary: User-Agent) in den virtuellen Hosts verbleiben, und überprüfen Sie die CDN-Cache-Trefferquote vor und nach der Änderung.