Erläuterung der Konfigurationsdateien

In diesem Dokument werden die verschiedenen Konfigurationsdateien aufgeschlüsselt und erläutert, die in einem standardmäßigen, in Adobe Managed Services bereitgestellten Dispatcher-Server implementiert werden. Dies umfasst ihre Verwendung, die Namenskonvention usw.

Namenskonvention

Der Apache-Webserver berücksichtigt beim Ansprechen von Dateien über „include“ oder „includeoptional“ nicht die Dateierweiterung.  Deshalb ist es äußerst nützlich, sie ordnungsgemäß zu benennen und hierbei Konflikte und Missverständnisse zu vermeiden. Hierzu sollten die verwendeten Namen beschreiben, wo die Datei angewendet wird. Wenn alle Dateien mit „.conf“ benannt werden, wird es schnell unübersichtlich. Vermeiden Sie nicht aussagekräftige Dateinamen und -erweiterungen.  Unten finden Sie eine Liste der verschiedenen individuellen Dateierweiterungen und Namenskonventionen, die in einem standardmäßig konfigurierten Dispatcher verwendet werden.

In „conf.d/“ enthaltene Dateien

Datei

Dateiziel

Beschreibung

<DATEINAME>.conf

/etc/httpd/conf.d/

Standardmäßige Enterprise Linux-Installationen verwenden diese Dateierweiterung und diesen Include-Ordner als Ort, um die Einstellungen in „httpd.conf“ zu überschreiben und Ihnen in Apache das Hinzufügen zusätzlicher Funktionen auf globaler Ebene zu ermöglichen.

<DATEINAME>.vhost

Staging: /etc/httpd/conf.d/available_vhosts/

Aktiv:

/etc/httpd/conf.d/enabled_vhosts/

* Hinweis: *.vhost-Dateien werden nicht in den Ordner „enabled_vhosts“ kopiert, sondern verwenden Symlinks zu einem relativen Pfad zur Datei „available_vhosts/*.vhost“.

 

*.vhost-Dateien (virtueller Host) sind <VirtualHosts >-Einträge, die mit Hostnamen abgeglichen werden und es Apache ermöglichen, den Traffic der verschiedenen Domains mit unterschiedlichen Regeln zu verarbeiten. Über die *.vhost-Datei werden auch andere Dateien, z. B. für Rewrites, Whitelisting usw., einbezogen.

<DATEINAME>_rewrite.rules

/etc/httpd/conf.d/rewrites/

*_rewrite.rules-Dateien speichern „mod_rewrite“-Regeln, die explizit von einer *.vhost-Datei einbezogen und verwendet werden sollen.

<DATEINAME>_whitelist.rules

/etc/httpd/conf.d/whitelists/

*_ipwhitelist.rules-Dateien werden über die *.vhost-Dateien einbezogen. Sie enthalten reguläre IP-Ausdrücke oder ermöglichen Deny-Regeln für IP-Whitelisting. Wenn Sie die Anzeige eines virtuellen Hosts basierend auf IP-Adressen beschränken möchten, generieren Sie eine dieser Dateien und beziehen Sie sie über Ihre *.vhost-Datei ein.

In „conf.modules.d/“ enthaltene Dateien

Datei

Dateiziel

Beschreibung

<DATEINAME>.any

/etc/httpd/conf.dispatcher.d/

Das AEM-Dispatcher-Modul für Apache bezieht seine Einstellungen aus *.any-Dateien. Die standardmäßige übergeordnete Include-Datei ist „conf.dispatcher.d/dispatcher.any“.

<DATEINAME>_farm.any

Staging:

/etc/httpd/conf.dispatcher.d/available_farms/

Aktiv:

/etc/httpd/conf.dispatcher.d/enabled_farms/

* Hinweis: Diese Farmdateien werden nicht in den Ordner „enabled_farms“ kopiert, sondern verwenden Symlinks zu einem relativen Pfad zur Datei „available_farms/*_farm.any“.

*_farm.any-Dateien werden in der Datei „conf.dispatcher.d/dispatcher.any“ einbezogen. Diese übergeordneten Farmdateien dienen der Steuerung des Modulverhaltens für die einzelnen Render-Vorgänge oder Website-Typen. Dateien werden im Verzeichnis „available_farms“ erstellt und mit einem Symlink im Verzeichnis „enabled_farms“ aktiviert.

 

Sie werden automatisch anhand ihres Namens aus der Datei „dispatcher.any“ einbezogen.

 

Essenzielle Farmdateien müssen mit „000_“ beginnen, damit sie zuerst geladen werden.

Benutzerdefinierte Farmdateien sollten erst danach geladen werden, um das richtige Include-Verhalten zu gewährleisten. Hierzu müssen sie mit Zahlen ab „100_“ beginnen.

<DATEINAME>_filters.any

/etc/httpd/conf.dispatcher.d/filters/

*_filters.any-Dateien werden aus den *_farm.any-Dateien in „conf.dispatcher.d/enabled_farms“ heraus einbezogen. Jede Farm verfügt über verschiedene Regeln, die festlegen, welcher Traffic herausgefiltert und nicht an die Renderer bereitgestellt werden soll.

<DATEINAME>_vhosts.any

/etc/httpd/conf.dispatcher.d/vhosts/

*_vhosts.any-Dateien werden aus den *_farm.any-Dateien in „conf.dispatcher.d/enabled_farms“ heraus einbezogen. Diese Dateien enthalten Listen von Hostnamen oder URI-Pfaden, die per BLOB abgeglichen werden, um zu bestimmen, welcher Renderer für die Verarbeitung der jeweiligen Anfrage verwendet werden soll.

<DATEINAME>_cache.any

/etc/httpd/conf.dispatcher.d/cache/

*_cache.any-Dateien werden aus den *_farm.any-Dateien in „conf.dispatcher.d/enabled_farms“ heraus einbezogen. Diese Dateien geben an, welche Elemente gecacht werden und welche nicht.

<DATEINAME>_invalidate_allowed.any

/etc/httpd/conf.dispatcher.d/cache/

*_invalidate.any-Dateien werden in den *_farm.any-Dateien in „conf.dispatcher.d/enabled_farms“ einbezogen. Sie geben an, welche IP-Adressen Anfragen für Leerungen und Invalidierungen senden dürfen.

<DATEINAME>_clientheaders.any

/etc/httpd/conf.dispatcher.d/clientheaders/

*_clientheaders.any-Dateien werden in den *_farm.any-Dateien in „conf.dispatcher.d/enabled_farms“ einbezogen. Sie geben an, welche Client-Header an die jeweiligen Renderer übergeben werden sollen.

<DATEINAME>_renders.any

/etc/httpd/conf.dispatcher.d/renders/

*_renderers.any-Dateien werden in den *_farm.any-Dateien in „conf.dispatcher.d/enabled_farms“ einbezogen. Sie geben IP, Port und Timeout-Einstellungen für die einzelnen Renderer an. Bei einem ordnungsgemäßen Renderer kann es sich um einen LiveCycle-Server oder beliebige AEM-Systeme handeln, auf dem bzw. denen der Dispatcher die Anfragen aus folgender Quelle abruft und weiterleitet:

Problemvermeidung

Wenn Sie die Namenskonvention befolgen, können Sie einige häufige Fehler vermeiden, die verheerende Folgen haben können.  Wir decken im Folgenden einige Beispiele ab.

Beispielproblem

Für die Site des Unternehmens „ExampleCo“ haben die Entwickler der Dispatcher-Konfigurationen zwei Konfigurationsdateien erstellt.

/etc/httpd/conf.d/exampleco.conf

<VirtualHost *:80> 
    ServerName  "exampleco" 
    ServerAlias "www.exampleco.com" 
    .......... SNIP ............... 
    <IfModule mod_rewrite.c> 
        ReWriteEngine   on 
        LogLevel warn rewrite:trace1 
        Include /etc/httpd/conf.d/rewrites/exampleco.conf 
    </IfModule> 
</VirtualHost>

/etc/httpd/conf.d/rewrites/exampleco.conf

RewriteRule ^/$ /content/exampleco/en.html [PT,L] 
RewriteRule ^/robots.txt$ /content/dam/exampleco/robots.txt [PT,L]

Potenzielles Problem

Die Dateinamen sind identisch

Wenn die „vhost“-Datei versehentlich im „rewrites“-Ordner und die „rewrites“-Datei im „vhosts“-Ordner abgelegt wird,  wurden die Dateien anhand des Dateinamens zwar scheinbar richtig bereitgestellt, doch in Apache tritt ein Fehler auf. Das Problem ist hierbei nicht direkt ersichtlich.

So wird das Ganze zum Problem

Wenn die beiden Dateien in denselben Speicherort heruntergeladen werden, überschreiben sie sich gegenseitig oder machen eine Unterscheidung unmöglich. So wird die Implementierung zum Albtraum.

Die Dateierweiterungen sind identisch und anfällig für automatische Includes

Beide Dateien nutzen die *.conf-Erweiterung. Dateien mit dieser Erweiterung bezieht Apache in vielen seiner Standardordner automatisch ein.

So wird das Ganze zum Problem

Wenn die „vhost“-Datei mit der Erweiterung *.conf im Ordner „/etc/httpd/conf.d/“ abgelegt wird, versucht das System, sie in den Arbeitsspeicher von Apache zu laden. Das stellt in der Regel zwar noch kein Problem dar, doch wenn die *.conf-Datei mit den Rewrite-Regeln im Ordner „/etc/httpd/conf.d/“ abgelegt wird, wird sie automatisch einbezogen und global angewendet, was zu Verwirrung und unerwünschten Ergebnissen führt.

 

 

Empfohlene Lösung

Benennen Sie die Dateien basierend darauf, welche Funktion sie erfüllen, und nutzen Sie bei der Benennung keine Namespaces, die automatisch einbezogen werden.

Wenn es sich um eine Datei für virtuelle Hosts handelt, fügen Sie ihr die Erweiterung *.vhost hinzu.

Benennen Sie Dateien mit Rewrite-Regeln mit <Site>_rewrite.rules als Suffix bzw. als Erweiterung. Mit dieser Namenskonvention sehen Sie auf einen Blick, für welche Site die Datei bestimmt ist und dass sie Rewrite-Regeln enthält.

Benennen Sie Dateien mit IP-Whitelisting-Regeln mit <Site>_whitelist.rules als Suffix bzw. als Erweiterung. Mit dieser Namenskonvention sehen Sie auf einen Blick, wofür die Datei bestimmt ist und dass sie Whitelisting-Regeln enthält.

Halten Sie sich an diese Namenskonvention, um Probleme zu vermeiden, wenn Dateien in einem Verzeichnis mit automatischem Include abgelegt werden, in das sie nicht gehören.

Wenn Sie beispielsweise eine Datei mit der Endung *.rules, *.any oder *.vhost im Ordner „/etc/httpd/conf.d/“ (mit automatischem Include) ablegen, hat dies keine Auswirkungen.

Wenn eine Anfrage für eine Implementierungsänderung eingeht, in der darum gebeten wird, die Datei „exampleco_rewrite.rules“ auf den Produktions-Dispatchern bereitzustellen, erkennt die Person, die die Änderung vornimmt, schon am Dateinamen, dass sie keine neue Site hinzufügt, sondern nur die Rewrite-Regeln aktualisiert.

Include-Reihenfolge

Bei der Erweiterung von Funktionen und Konfigurationen eines Apache-Webservers unter Enterprise Linux sollten Sie die Reihenfolge kennen, in der die Elemente einbezogen werden.

Grundlegende Apache-Includes

Grundlegende Include-Reihenfolge in Apache Die Apache-Binärdatei beginnt mit „httpd.conf“, das einen „includeoptional“-Vorgang für die Verzeichnisse „conf.d/*.conf“ und „conf.modules.d/*.conf“ durchführt.

Wie in der Abbildung oben dargestellt, verwendet die HTTPD-Binärdatei nur die Datei „httpd.conf“ als Konfigurationsdatei.  Diese Datei enthält die folgenden Anweisungen:

Include conf.modules.d/*.conf 
IncludeOptional conf.d/*.conf

AMS-Top-Level-Includes

Bei der Anwendung des Standards haben wir einige zusätzliche Dateitypen und eigene Includes hinzugefügt.

Im Folgenden finden Sie die grundlegenden AMS-Verzeichnisse und Top-Level-Includes

Die grundlegenden AMS-Includes beginnen mit einer „dispatcher_vhost.conf“-Datei, die alle Dateien mit der Erweiterung *.vhost im Verzeichnis „/etc/httpd/conf.d/enabled_vhosts/“ einbezieht. Bei den Elementen im Verzeichnis „/etc/httpd/conf.d/enabled_vhosts/“ handelt es sich um Symlinks zu der eigentlichen Konfigurationsdatei, die sich in „/etc/httpd/conf.d/available_vhosts/“ befindet.

Anhand der Erweiterung der grundlegenden Apache-Includes veranschaulichen wir, wie AMS einige zusätzliche Ordner und Top-Level-Includes für „conf.d“-Ordner sowie modulspezifische Verzeichnisse unter /etc/httpd/conf.dispatcher.d/ erstellt.

Wenn Apache geladen wird, ruft es /etc/httpd/conf.modules.d/02-dispatcher.conf ab. Diese Datei bezieht dann die Datei /etc/httpd/modules/mod_dispatcher.so im ausgeführten Zustand ein. 

LoadModule dispatcher_module modules/mod_dispatcher.so


Um das Modul in <VirtualHost /> zu verwenden, legen wir unter /etc/httpd/conf.d/ eine Konfigurationsdatei namens dispatcher_vhost.conf ab. In dieser Datei werden die grundlegenden Parameter eingerichtet, die für die Funktionsfähigkeit des Moduls erforderlich sind:

<IfModule disp_apache2.c> 
    DispatcherConfig conf.dispatcher.d/dispatcher.any 
    ...SNIP... 
</IfModule>

Wie oben gezeigt beinhaltet dies die übergeordnete Datei „dispatcher.any“, über die unser Dispatcher-Modul seine Konfigurationsdateien aus /etc/httpd/conf.dispatcher.d/dispatcher.any abruft. 

Der Inhalt der Datei sieht wie folgt aus:

/farms { 
    $include "enabled_farms/*_farm.any" 
}

Die übergeordnete Datei „dispatcher.any“ beinhaltet alle aktivierten Farmdateien in /etc/httpd/conf.dispatcher.d/enabled_farms/, die den Dateinamen <DATEINAME>_farm.any aufweisen. Der Dateiname folgt unserer standardmäßigen Namenskonvention.

Später in der zuvor erwähnten Datei dispatcher_vhost.conf führen wir darüber hinaus eine Include-Anweisung aus, um die einzelnen aktivierten „vhost“-Dateien in /etc/httpd/conf.d/enabled_vhosts/ zu aktivieren, die den Dateinamen <DATEINAME>.vhost aufweisen. Der Dateiname folgt unserer standardmäßigen Namenskonvention.

 

 
IncludeOptional /etc/httpd/conf.d/enabled_vhosts/*.vhost

Das Dispatcher-Modul wird in allen *.vhost-Dateien als standardmäßiger Datei-Handler für Verzeichnisse initialisiert.  Im Folgenden finden Sie ein Beispiel für eine *.vhost-Datei, um die Syntax zu veranschaulichen:

<VirtualHost *:80> 
 ServerName "weretail" 
 ServerAlias www.weretail.com weretail.com 
 <Directory /> 
  <IfModule disp_apache2.c> 
   ....SNIP.... 
   SetHandler dispatcher-handler 
  </IfModule> 
  ....SNIP.... 
 </Directory> 
 ....SNIP.... 
</VirtualHost>

Neben den Top-Level-Includes gibt es noch weitere, untergeordnete Includes, die Sie kennen sollten.  Das folgende Diagramm veranschaulicht, wie Farm- und „vhost“-Dateien andere, untergeordnete Elemente einbeziehen.

AMS-vhost-Includes

AMS-vhost-Includes untergeordneter Elemente Diese Abbildung zeigt, wie eine *.vhost-Datei Dateien aus Variablen, Whitelists und Rewrite-Ordnern einbezieht.

Wenn *.vhost-Dateien aus dem Verzeichnis /etc/httpd/conf.d/availabled_vhosts/ per Symlink im Verzeichnis /etc/httpd/conf.d/enabled_vhosts/ abgelegt werden, werden sie in der laufenden Konfiguration verwendet.

Die *.vhost-Dateien enthalten untergeordnete Includes, die auf vielfach verwendeten Elementen basieren.  Diese Elemente umfassen Variablen, Whitelists und Rewrite-Regeln.

Die *.vhost-Datei enthält Include-Anweisungen für die einzelnen Dateien, die darauf basieren, wo in der *.vhost-Datei sie einbezogen werden müssen.  Im Folgenden finden Sie die Beispielsyntax einer *.vhost-Datei als Referenz:

Include /etc/httpd/conf.d/variables/weretail.vars 
<VirtualHost *:80> 
 ServerName "${MAIN_DOMAIN}" 
 <Directory /> 
  Include /etc/httpd/conf.d/whitelists/weretail*_whitelist.rules 
  <IfModule disp_apache2.c> 
   ....SNIP.... 
   SetHandler dispatcher-handler 
  </IfModule> 
  ....SNIP.... 
 </Directory> 
 ....SNIP.... 
 <IfModule mod_rewrite.c> 
  ReWriteEngine   on 
  LogLevel warn rewrite:trace1 
  Include /etc/httpd/conf.d/rewrites/weretail_rewrite.rules 
 </IfModule> 
</VirtualHost>

Wie Sie im obigen Beispiel sehen können, gibt es Includes für die in dieser Konfigurationsdatei erforderlichen Variablen, die später verwendet werden.

In der Datei /etc/httpd/conf.d/variables/weretail.vars sehen wir, welche Variablen definiert werden:

 

Define MAIN_DOMAIN dev.weretail.com

Darüber enthält die Datei eine Zeile mit einer Liste der „whitelist.rules“-Dateien, die basierend auf verschiedenen Kriterien festlegen, wer diesen Inhalt anzeigen darf.  Sehen wir uns die Inhalte einer der Whitelist-Dateien (/etc/httpd/conf.d/whitelists/weretail_mainoffice_whitelist.rules) an:

<RequireAny> 
  Require ip 192.150.16.0/23 
</RequireAny>

Die Datei umfasst eine Zeile, die eine Reihe von Rewrite-Regeln enthält.  Sehen wir uns die Inhalte der Datei weretail_rewrite.rules an:

RewriteRule ^/robots.txt$ /content/dam/weretail/robots.txt [NC,PT] 
RewriteCond %{SERVER_NAME} brand1.weretail.net [NC] 
RewriteRule ^/favicon.ico$ /content/dam/weretail/favicon.ico [NC,PT] 
RewriteCond %{SERVER_NAME} brand2.weretail.com [NC] 
RewriteRule ^/sitemap.xml$ /content/weretail/general/sitemap.xml [NC,PT] 
RewriteRule ^/logo.jpg$ /content/dam/weretail/general/logo.jpg [NC,PT]

AMS-Farm-Includes

<DATEINAME>_farms.any bezieht auch untergeordnete *.any-Dateien ein, um die Farmkonfiguration abzuschließen. Diese Abbildung zeigt, dass eine Farm die *.any-Dateien der übergeordneten Abschnitte „cache“, „clientheaders“, „filters“, „renders“ und „vhosts“ einbezieht.

Wenn eine beliebige <DATEINAME>_farm.any-Datei aus dem Verzeichnis /etc/httpd/conf.dispatcher.d/available_farms/ per Symlink im Verzeichnis /etc/httpd/conf.dispatcher.d/enabled_farms/ abgelegt wird, wird sie in der laufenden Konfiguration verwendet.

Die Farmdateien enthalten untergeordnete Includes, die auf den übergeordneten Abschnitten der Farm wie „cache“, „clientheaders“, „filters“, „renders“ und „vhosts“ basieren.

Die <DATEINAME>_farm.any-Dateien enthalten Include-Anweisungen für die einzelnen Dateien, die darauf basieren, wo in der Farmdatei sie einbezogen werden müssen.  Im Folgenden finden Sie die Beispielsyntax einer <DATEINAME>_farm.any-Datei als Referenz:

/weretailfarm {   
 /clientheaders { 
  $include "/etc/httpd/conf.dispatcher.d/clientheaders/ams_publish_clientheaders.any" 
  $include "/etc/httpd/conf.dispatcher.d/clientheaders/ams_common_clientheaders.any" 
 } 
 /virtualhosts { 
  $include "/etc/httpd/conf.dispatcher.d/vhosts/weretail_vhosts.any" 
 } 
 /renders { 
  $include "/etc/httpd/conf.dispatcher.d/renders/ams_publish_renders.any" 
 } 
 /filter { 
  $include "/etc/httpd/conf.dispatcher.d/filters/ams_publish_filters.any" 
  $include "/etc/httpd/conf.dispatcher.d/filters/weretail_search_filters.any" 
 } 
 ....SNIP.... 
 /cache { 
  ....SNIP.... 
  /rules { 
   $include "/etc/httpd/conf.dispatcher.d/cache/ams_publish_cache.any" 
  } 
  ....SNIP.... 
  /allowedClients { 
   /0000 { 
    /glob "*.*.*.*" 
    /type "deny" 
   } 
   $include "/etc/httpd/conf.dispatcher.d/cache/ams_publish_invalidate_allowed.any" 
  } 
 ....SNIP.... 
 } 
}

Wie Sie sehen können, enthalten die einzelnen Abschnitte für die „weretail“-Farm nicht die gesamte erforderliche Syntax, sondern eine Include-Anweisung.

Sehen wir uns die Syntax einiger Includes an, damit Sie einen Eindruck davon erhalten, wie die einzelnen untergeordneten Includes aussehen.

/etc/httpd/conf.dispatcher.d/vhosts/weretail_publish_vhosts.any:

"brand1.weretail.com" 
"brand2.weretail.com" 
"www.weretail.comf"

Wie Sie sehen können, handelt es sich hierbei um eine neue zeilengetrennte Liste von Domain-Namen, die vorzugsweise über diese Farm und nicht über andere gerendert werden sollen.

Sehen wir uns als Nächstes /etc/httpd/conf.dispatcher.d/filters/weretail_search_filters.any an:

/400 { /type "allow" /method "GET" /path "/bin/weretail/lists/*" /extension "json" } 
/401 { /type "allow" /method "POST" /path "/bin/weretail/search/' /extension "html" }

Weiter ➡ Erläuterung des Cache

Adobe-Logo

Bei Ihrem Konto anmelden