Schreibgeschützte oder unveränderliche Dateien in AEM
Beschreibung description
Umgebung
Experience Manager
Problem/Symptome
Wenn Adobe Managed Services (AMS) ein System bereitstellt, wird eine Basiskonfiguration erstellt, die alles funktional und sicher macht. Dies sind Dinge, die AMS als Basis für Funktionalität und Sicherheit sicherstellen möchte. Zu diesem Zweck werden einige Dateien als schreibgeschützt und unveränderlich markiert, damit sie nicht von Ihnen geändert werden können.
Das Layout hindert Sie nicht daran, das Verhalten dieser Elemente zu ändern und die erforderlichen Änderungen zu überschreiben. Anstatt diese Dateien zu ändern, überlagern Sie Ihre eigene Datei, die das Original ersetzt.
Dadurch können Sie sich auch darauf verlassen, dass Ihre Dateien nicht verändert werden, wenn AMS die Dispatcher mit den neuesten Fehlerbehebungen und Sicherheitsverbesserungen aktualisiert. Dann können Sie weiterhin von den Verbesserungen profitieren und nur die gewünschten Änderungen übernehmen.
Wie im obigen Bild gezeigt, halten unveränderliche Dateien Sie nicht vom Spiel ab. Sie halten dich nur davon ab, deine Leistung zu beeinträchtigen und halten dich in der Spur. Diese Methode ermöglicht uns die wenigen sehr wichtigen Funktionen:
- Anpassungen werden in ihren eigenen sicheren Bereichen vorgenommen
- Die Überlagerung benutzerdefinierter Änderungen entspricht den Überlagerungsmethoden in AEM
- Patches für AMS-Konfigurationen können durchgeführt werden, ohne die Anpassungen zu ändern
- Das Testen der Basisinstallation im Vergleich zu benutzerdefinierten Konfigurationen kann gleichzeitig durchgeführt werden, um festzustellen, ob die Probleme durch Anpassungen oder durch etwas Anderes verursacht werden. Welche Dateien?
Im Folgenden finden Sie eine typische Liste von Dateien, die mit einer Dispatcher bereitgestellt werden:
/etc/httpd/
├── conf
│ └── httpd.conf
├── conf.d
│ ├── available_vhosts
│ │ ├── 000_unhealthy_author.vhost
│ │ ├── 000_unhealthy_publish.vhost
│ │ ├── aem_author.vhost
│ │ ├── aem_flush.vhost
│ │ ├── aem_health.vhost
│ │ ├── aem_lc.vhost
│ │ └── aem_publish.vhost
│ ├── dispatcher_vhost.conf
│ ├── enabled_vhosts
│ │ ├── aem_author.vhost -> /etc/httpd/conf.d/available_vhosts/aem_author.vhost
│ │ ├── aem_flush.vhost -> /etc/httpd/conf.d/available_vhosts/aem_flush.vhost
│ │ ├── aem_health.vhost -> /etc/httpd/conf.d/available_vhosts/aem_health.vhost
│ │ └── aem_publish.vhost -> /etc/httpd/conf.d/available_vhosts/aem_publish.vhost
│ ├── logformat.conf
│ ├── remoteip.conf
│ ├── rewrites
│ │ ├── base_rewrite.rules
│ │ └── xforwarded_forcessl_rewrite.rules
│ ├── security.conf
│ ├── variables
│ │ └── ams_default.vars
│ └── whitelists
│ └── 000_base_whitelist.rules
├── conf.dispatcher.d
│ ├── available_farms
│ │ ├── 000_ams_author_farm.any
│ │ ├── 001_ams_lc_farm.any
│ │ └── 999_ams_publish_farm.any
│ ├── cache
│ │ ├── ams_author_cache.any
│ │ ├── ams_author_invalidate_allowed.any
│ │ ├── ams_publish_cache.any
│ │ └── ams_publish_invalidate_allowed.any
│ ├── clientheaders
│ │ ├── ams_author_clientheaders.any
│ │ ├── ams_common_clientheaders.any
│ │ ├── ams_lc_clientheaders.any
│ │ └── ams_publish_clientheaders.any
│ ├── dispatcher.any
│ ├── enabled_farms
│ │ ├── 000_ams_author_farm.any -> /etc/httpd/conf.dispatcher.d/available_farms/000_ams_author_farm.any
│ │ └── 999_ams_publish_farm.any -> /etc/httpd/conf.dispatcher.d/available_farms/999_ams_publish_farm.any
│ ├── filters
│ │ ├── ams_author_filters.any
│ │ ├── ams_lc_filters.any
│ │ └── ams_publish_filters.any
│ ├── renders
│ │ ├── ams_author_renders.any
│ │ ├── ams_lc_renders.any
│ │ └── ams_publish_renders.any
│ └── vhosts
│ ├── ams_author_vhosts.any
│ ├── ams_lc_vhosts.any
│ └── ams_publish_vhosts.any
├── conf.modules.d
│ ├── 01-cgi.conf
│ └── 02-dispatcher.conf
└── modules -> ../../usr/lib64/httpd/modules
└── mod_dispatcher.so
Um festzustellen, welche Dateien unveränderlich sind, können Sie den folgenden Befehl auf einer Dispatcher ausführen, um Folgendes anzuzeigen:
$ lsattr -Rl /etc/httpd 2 > /dev/null | grep Immutable
Im Folgenden finden Sie eine Beispielantwort, die angibt, welche Dateien unveränderlich sind:
/etc/httpd/conf/httpd.conf Immutable
/etc/httpd/conf.d/available_vhosts/aem_author.vhost Immutable
/etc/httpd/conf.d/available_vhosts/aem_publish.vhost Immutable
/etc/httpd/conf.d/available_vhosts/aem_lc.vhost Immutable
/etc/httpd/conf.d/available_vhosts/aem_flush.vhost Immutable
/etc/httpd/conf.d/available_vhosts/aem_health.vhost Immutable
/etc/httpd/conf.d/available_vhosts/000_unhealthy_author.vhost Immutable
/etc/httpd/conf.d/available_vhosts/000_unhealthy_publish.vhost Immutable
/etc/httpd/conf.d/rewrites/base_rewrite.rules Immutable
/etc/httpd/conf.d/rewrites/xforwarded_forcessl_rewrite.rules Immutable
/etc/httpd/conf.d/whitelists/000_base_whitelist.rules Immutable
/etc/httpd/conf.d/dispatcher_vhost.conf Immutable
/etc/httpd/conf.d/logformat.conf Immutable
/etc/httpd/conf.d/security.conf Immutable
/etc/httpd/conf.modules.d/02-dispatcher.conf Immutable
/etc/httpd/conf.dispatcher.d/available_farms/000_ams_author_farm.any Immutable
/etc/httpd/conf.dispatcher.d/available_farms/999_ams_publish_farm.any Immutable
/etc/httpd/conf.dispatcher.d/available_farms/001_ams_lc_farm.any Immutable
/etc/httpd/conf.dispatcher.d/cache/ams_author_cache.any Immutable
/etc/httpd/conf.dispatcher.d/cache/ams_author_invalidate_allowed.any Immutable
/etc/httpd/conf.dispatcher.d/cache/ams_publish_cache.any Immutable
/etc/httpd/conf.dispatcher.d/cache/ams_publish_invalidate_allowed.any Immutable
/etc/httpd/conf.dispatcher.d/clientheaders/ams_author_clientheaders.any Immutable
/etc/httpd/conf.dispatcher.d/clientheaders/ams_publish_clientheaders.any Immutable
/etc/httpd/conf.dispatcher.d/clientheaders/ams_common_clientheaders.any Immutable
/etc/httpd/conf.dispatcher.d/clientheaders/ams_lc_clientheaders.any Immutable
/etc/httpd/conf.dispatcher.d/filters/ams_author_filters.any Immutable
/etc/httpd/conf.dispatcher.d/filters/ams_publish_filters.any Immutable
/etc/httpd/conf.dispatcher.d/filters/ams_lc_filters.any Immutable
/etc/httpd/conf.dispatcher.d/renders/ams_author_renders.any Immutable
/etc/httpd/conf.dispatcher.d/renders/ams_publish_renders.any Immutable
/etc/httpd/conf.dispatcher.d/renders/ams_lc_renders.any Immutable
/etc/httpd/conf.dispatcher.d/vhosts/ams_author_vhosts.any Immutable
/etc/httpd/conf.dispatcher.d/vhosts/ams_publish_vhosts.any Immutable
/etc/httpd/conf.dispatcher.d/vhosts/ams_lc_vhosts.any Immutable
/etc/httpd/conf.dispatcher.d/dispatcher.any Immutable
Auflösung resolution
Wie können Sie Änderungen vornehmen?
Variablen
Mit Variablen können Sie funktionale Änderungen vornehmen, ohne die Konfigurationsdateien selbst zu ändern. Bestimmte Elemente der Konfiguration können durch Anpassen der Werte von Variablen angepasst werden. Ein Beispiel, das aus dem /etc/httpd/conf.d/dispatcher_vhost.conf hervorgehoben wird, ist hier zu sehen:
Include /etc/httpd/conf.d/variables/ams_default.vars
<IfModule disp_apache2.c>
DispatcherConfig conf.dispatcher.d/dispatcher.any
DispatcherLog logs/dispatcher.log
DispatcherLogLevel ${DISP_LOG_LEVEL}
DispatcherDeclineRoot 0
DispatcherUseProcessedURL 1
</IfModule>
Sehen Sie, wie die DispatcherLogLevel-Direktive die Variable DISP_LOG_LEVEL anstelle des normalen Werts enthält, den Sie sonst dort sehen würden. Oberhalb dieses Codeabschnitts sehen Sie auch eine Include-Anweisung für eine Variablendatei. Als Nächstes sehen Sie sich die Variablendatei /etc/httpd/conf.d/variables/ams_default.vars an. Im Folgenden finden Sie den Inhalt dieser Variablendatei:
Define DISP_LOG_LEVEL info
Define AUTHOR_WHITELIST_ENABLED 0
Define PUBLISH_WHITELIST_ENABLED 0
Define LIVECYCLE_WHITELIST_ENABLED 0
Define AUTHOR_FORCE_SSL 1
Define PUBLISH_FORCE_SSL 0
Define LIVECYCLE_FORCE_SSL 1
Oben sehen Sie, dass der aktuelle Wert DISP_LOG_LEVEL Variablen „info“ lautet. Sie können diesen Wert auf „trace“ oder „debug“ oder auf einen Zahlenwert/ein Level Ihrer Wahl einstellen. Jetzt wird überall, wo die Protokollebene gesteuert wird, automatisch angepasst.
Überlagerungsmethode
Bitte machen Sie sich mit Include-Dateien der obersten Ebene vertraut, da diese Ihr Ausgangspunkt für alle Anpassungen sind. Um mit einem einfachen Beispiel zu beginnen, haben Sie ein Szenario, in dem Sie einen neuen Domain-Namen hinzufügen möchten, der auf diese Dispatcher verweisen soll. Als Domain-Beispiel verwenden wir we-retail.adobe.com.. Kopieren Sie zunächst eine vorhandene Konfigurationsdatei in eine neue, in die wir unsere Änderungen einfügen können:
$ cp /etc/httpd/conf.d/available_vhosts/aem_publish.vhost /etc/httpd/conf.d/available_vhosts/weretail_publish.vhost
Sie haben die vorhandene aem_publish.vhost-Datei kopiert, weil sie bereits alles enthält, was Sie benötigen, und Sie einen guten Ansatz nicht neu erfinden möchten. Bearbeiten Sie nun die neue Datei weretail.vhost und nehmen Sie die erforderlichen Änderungen vor.
before:
<VirtualHost *:80>
ServerName publish
ServerAlias ${PUBLISH_DEFAULT_HOSTNAME}
DocumentRoot ${PUBLISH_DOCROOT}
<IfModule mod_headers.c>
Header always add X-Dispatcher ${DISP_ID}
Header always add X-Vhost "publish"
Header merge X-Frame-Options SAMEORIGIN "expr=%{resp:X-Frame-Options}!='SAMEORIGIN'"
Header merge X-Content-Type-Options nosniff "expr=%{resp:X-Content-Type-Options}!='nosniff'"
Header append Vary User-Agent env=!dont-vary
</IfModule>
....... SNIP.......
</VirtualHost>
after:
<VirtualHost *:80>
ServerName weretail-publish
ServerAlias we-retail.adobe.com
DocumentRoot ${PUBLISH_DOCROOT}
<IfModule mod_headers.c>
Header always add X-Dispatcher ${DISP_ID}
Header always add X-Vhost "werteail-publish"
Header merge X-Frame-Options SAMEORIGIN "expr=%{resp:X-Frame-Options}!='SAMEORIGIN'"
Header merge X-Content-Type-Options nosniff "expr=%{resp:X-Content-Type-Options}!='nosniff'"
Header append Vary User-Agent env=!dont-vary
</IfModule>
....... SNIP.......
</VirtualHost>
Jetzt haben Sie unseren ServerName und ServerAlias aktualisiert, damit sie den neuen Domain-Namen entsprechen, und auch andere Breadcrumb-Header wurden aktualisiert. Lassen Sie uns nun unsere neue Datei aktivieren, damit Apache weiß, dass unsere neue Datei verwendet werden soll:
$ cd /etc/httpd/conf.d/enabled_vhosts/; ln -s ../available_vhosts/weretail_publish.vhost .
Jetzt weiß der Apache-Webserver, dass eine Domain etwas ist, für das er Traffic liefern sollte, aber Sie müssen dem Dispatcher-Modul dennoch mitteilen, dass es einen neuen Domain-Namen zu berücksichtigen hat. Erstellen Sie zunächst eine neue Datei "*_vhost.any“ /etc/httpd/conf.dispatcher.d/vhosts/weretail_vhosts.any und fügen Sie in diese Datei den Domain-Namen ein, der berücksichtigt werden soll:
"we-retail.adobe.com"
Jetzt müssen Sie eine neue Farm-Datei erstellen, die unsere neue vhost-Eingabedatei verwendet, und Sie werden beginnen, indem Sie eine starke Startdatei in unsere neue kopieren.
$ cp /etc/httpd/conf.dispatcher.d/available_farms/999_ams_publish_farm.any /etc/httpd/conf.dispatcher.d/available_farms/400_weretail_publish_farm.any
Zeigt die notwendigen Änderungen an dieser Farm-Datei an
before:
/publishfarm {
/virtualhosts {
$include "/etc/httpd/conf.dispatcher.d/vhosts/ams_publish_vhosts.any"
}
........SNIP.........
}
after:
/weretailpublishfarm {
/virtualhosts {
$include "/etc/httpd/conf.dispatcher.d/vhosts/weretail_publish_vhosts.any"
}
........SNIP.........
}
Jetzt haben Sie den Farm-Namen und das von ihm verwendete Include im Abschnitt /virtualhosts der Farm-Konfiguration aktualisiert. Sie müssen diese neue Farm-Datei aktivieren, damit sie in der laufenden Konfiguration verwendet werden kann:
$ cd /etc/httpd/conf.dispatcher.d/enabled_farms/; ln -s ../available_farms/400_weretail_publish_farm.any .
Jetzt laden Sie einfach den Webserver-Service neu und verwenden unsere neue Domain!
Hinweis:
Beachten Sie, dass Sie nur die Teile geändert haben, die Sie ändern mussten, und die vorhandenen Includes und den Code, der in den Basiskonfigurationsdateien enthalten war, genutzt haben. Sie müssen nur das Element abgrenzen, das Sie ändern müssen. Das macht die Sache viel einfacher und ermöglicht uns, weniger Code zu pflegen