Schreibgeschützte oder unveränderliche Dateien in AEM

Beschreibung description

Umgebung

Experience Manager

Problem/Symptome

Wenn Adobe Managed Services (AMS) ein System bereitstellt, führen sie eine Basiskonfiguration ein, die alles funktionsfähig und sicher macht. Dies sind Dinge, die der AMS sicherstellen möchte, dass er als Grundlage für Funktionalität und Sicherheit bleibt. Um dies zu erreichen, werden einige Dateien als schreibgeschützt und unveränderlich markiert, um zu vermeiden, dass Sie sie ändern.

Das Layout hindert Sie nicht daran, ihr Verhalten zu ändern und erforderliche Änderungen zu überschreiben. Anstatt diese Dateien zu ändern, überlagern Sie Ihre eigene Datei, die das Original ersetzt.

Auf diese Weise können Sie sich auch sicher sein, dass die Dispatcher bei Patches von AMS mit den neuesten Fehlerbehebungen und Sicherheitsverbesserungen Ihre Dateien nicht verändern.  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 davon ab, das Spiel zu spielen.  Sie halten Sie einfach davon ab, Ihre Leistung zu beeinträchtigen und halten Sie auf der Spur.  Diese Methode ermöglicht uns die wenigen wichtigsten Funktionen:

  • Anpassungen werden in ihren eigenen sicheren Bereichen vorgenommen
  • Die Überlagerung benutzerdefinierter Änderungen entspricht der Überlagerungsmethoden in AEM
  • Das Patchen von AMS-Konfigurationen kann ohne Ändern von Anpassungen durchgeführt werden
  • Das Testen der Basisinstallation und angepasster Konfigurationen kann gleichzeitig durchgeführt werden, um festzustellen, ob die Probleme durch Anpassungen verursacht werden oder etwas Anderes Welche Dateien?

Im Folgenden finden Sie eine typische Liste der Dateien, die mit einem 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 einem Dispatcher ausführen, um ihn anzuzeigen:

$ lsattr -Rl /etc/httpd 2 > /dev/null | grep Immutable

Im Folgenden finden Sie eine Beispielantwort mit unveränderlichen Dateien:

/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 kann ich Änderungen vornehmen?

Variablen

Variablen ermöglichen es Ihnen, funktionale Änderungen vorzunehmen, ohne die Konfigurationsdateien selbst zu ändern. Bestimmte Elemente der Konfiguration können durch Anpassung der Variablenwerte angepasst werden. Ein Beispiel, das aus der Datei /etc/httpd/conf.d/dispatcher_vhost.conf hervorgehoben wird, ist hier dargestellt:

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>

Erfahren Sie, wie die DispatcherLogLevel-Direktive eine Variable von DISP_LOG_LEVEL anstelle des dort angezeigten Normalwerts aufweist. Oberhalb dieses Codeabschnitts wird auch eine Include-Anweisung für eine Variablendatei angezeigt. Die Variablendatei "/etc/httpd/conf.d/variables/ams_default.vars", die als Nächstes angezeigt werden soll. 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 der Variable DISP_LOG_LEVEL "info"ist. Sie können dies anpassen, um die Verfolgung oder das Debugging oder den Zahlenwert/die Ebene Ihrer Wahl vorzunehmen. Überall, wo die Protokollebene gesteuert wird, werden nun automatisch Anpassungen vorgenommen.

Überlagerungsmethode

Bitte verstehen Sie die Include-Dateien der obersten Ebene, da diese Ihr Ausgangspunkt für Anpassungen sind. Zunächst ein einfaches Beispiel: Sie möchten einen neuen Domänennamen hinzufügen, der auf diese Dispatcher verweisen soll. Das Beispiel für eine Domäne, das wir verwenden möchten, ist we-retail.adobe.com. Start durch Kopieren einer vorhandenen Konfigurationsdatei in eine neue, in der wir unsere Änderungen hinzufü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, da sie bereits das enthält, was Sie benötigen, um Dinge zum Laufen zu bringen, und Sie nicht möchten einen bereits starken Start neu erfinden.  Jetzt bearbeiten Sie die neue Datei weretail.vhost und nehmen 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>

Nach:

<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, um den neuen Domänennamen zu entsprechen und auch andere Breadcrumb-Header zu aktualisieren.  Lassen Sie uns nun unsere neue Datei aktivieren, damit Apache wissen kann, wie sie unsere neue Datei verwenden kann:

$ cd /etc/httpd/conf.d/enabled_vhosts/; ln -s ../available_vhosts/weretail_publish.vhost .

Der Apache-Webserver weiß jetzt, dass eine Domäne Traffic generieren sollte. Sie müssen jedoch das Dispatcher-Modul darüber informieren, dass es einen neuen Domänennamen hat, den es berücksichtigen muss.  Erstellen Sie zunächst eine neue Datei *_vhost.any /etc/httpd/conf.dispatcher.d/vhosts/weretail_vhosts.any und fügen Sie in dieser Datei den Domänennamen ein, den Sie berücksichtigen möchten:

"we-retail.adobe.com"

Jetzt müssen Sie eine neue Farm-Datei erstellen, die unsere neue vhost-Eintragsdatei verwendet, und Sie werden beginnen, indem Sie eine starke Start-Datei 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 Änderungen an, die Sie an dieser Farm-Datei vornehmen müssen

Before:

/publishfarm {
    /virtualhosts {
        $include "/etc/httpd/conf.dispatcher.d/vhosts/ams_publish_vhosts.any"
    }
........SNIP.........
}

Nach:

/weretailpublishfarm {
    /virtualhosts {
        $include "/etc/httpd/conf.dispatcher.d/vhosts/weretail_publish_vhosts.any"
    }
........SNIP.........
}

Jetzt haben Sie den Farm-Namen aktualisiert und die darin verwendete Include-Datei 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-Dienst neu und nutzen 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, die mit den Basiskonfigurationsdateien geliefert wurden, nutzten.  Sie müssen nur das Element definieren, das Sie ändern müssen.  Erleichtert die Arbeit und ermöglicht es uns, weniger Code zu verwalten

recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f