Spiegazione dei file di configurazione | AEM
Descrizione
Ambiente
Experience Manager
Problema/Sintomi
Questo documento suddivide e descrive ciascuno dei file di configurazione distribuiti in un server Dispatcher standard fornito con Adobe Managed Services. Il loro utilizzo, le convenzioni di denominazione, ecc.
Convenzione di denominazione
Apache Webserver non si preoccupa effettivamente dell’estensione di un file quando esegue il targeting con un’istruzione opzionale di inclusione o inclusione. Assegnare nomi corretti che eliminino conflitti e confusione aiuta molto. I nomi utilizzati descrivono l’ambito di applicazione del file, semplificandone l’utilizzo. Se tutto si chiama .conf questo diventa davvero confuso. Evita file ed estensioni con nomi errati.
Di seguito è riportato un elenco delle diverse estensioni di file personalizzati e convenzioni di denominazione utilizzate in un tipico Dispatcher configurato in AMS.
File contenuti in conf.d/
<
NOMEFILE>
.conf<
NOMEFILE>
.vhostIn prova: /etc/httpd/conf.d/available_vhosts/
Attivo:
/etc/httpd/conf.d/enabled_vhosts/
*Nota: i file .vhost non devono essere copiati nella cartella enabled_vhosts ma utilizzano i collegamenti simbolici a un percorso relativo del file available_vhosts/ .vhost
<
VirtualHosts >
voci corrispondenti ai nomi host e che consentono ad Apache di gestire ogni traffico di dominio con regole diverse. Dal file .vhost, altri file come riscritture, whitelisting, ecc. è incluso.<
NOMEFILE>
_rewrite.rules*_rewrite.rules
file sono archiviate mod_rewrite
regole da includere e utilizzare esplicitamente in un file vhost<
NOMEFILE>
_whitelist.rulesFile contenuti in conf.modules.d/
<
NOMEFILE>
.any<
NOMEFILE>
_farm.anyIn prova
:
/etc/httpd/conf.dispatcher.d/available_farms/
Attivo
:
/etc/httpd/conf.dispatcher.d/enabled_farms/
*Nota: questi file di farm non devono essere copiati nella cartella enabled_farms ma utilizzano symlink a un percorso relativo del file available_farms/ _farm.any
Vengono inclusi automaticamente per nome dal file dispatcher.any.
I file della farm della linea di base iniziano con 000 per assicurarsi che vengano caricati per primi.
I file farm personalizzati devono essere caricati dopo avviando il relativo schema numerico a 100_ per garantire il corretto comportamento di inclusione.
<
NOMEFILE>
_filters.any<
NOMEFILE>
_vhosts.any<
NOMEFILE>
_cache.any<
NOMEFILE>
_invalidate_allowed.any<
NOMEFILE>
_clientheaders.any<
NOMEFILE>
_renders.anyProblemi evitati
Seguendo la convenzione di denominazione, evita di commettere errori che possono avere risultati catastrofici. Copriamo alcuni esempi.
Esempio di problema
Come esempio di sito per ExampleCo, due file di configurazione vengono creati dagli sviluppatori delle configurazioni di Dispatcher.
/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]
PERICOLO POTENZIALE
A. I nomi dei file sono uguali.
Se il file vhost viene inserito accidentalmente nella cartella di riscrittura e il file di riscrittura viene inserito nella cartella vhosts. Sembra essere implementato correttamente dal nome del file, ma Apache genera un errore e il problema non è immediatamente evidente.
In che modo questa situazione si trasforma in un problema?
Se i due file vengono scaricati nella stessa posizione, possono sovrascrivere se stessi o renderli indistinguibili, rendendo il processo di distribuzione un incubo.
B. Le estensioni dei file sono le stesse e includono automaticamente i file proni
Le estensioni dei file sono le stesse e utilizzano l’estensione inclusa automaticamente di Apache, che include automaticamente qualsiasi file .conf in molte delle sue cartelle predefinite.
Come questo diventa un problema?
Se il file vhost con estensione .conf viene inserito nella cartella /etc/httpd/conf.d/, tenta di caricarlo in memoria su Apache, il che è in genere corretto, ma se il file delle regole di riscrittura con estensione .conf viene inserito nella cartella /etc/httpd/conf.d/
, viene incluso automaticamente e applicato globalmente, causando risultati confusi e indesiderati.
Risoluzione
Denomina i file in base alle operazioni eseguite e in modo sicuro fuori dallo spazio dei nomi delle regole di inclusione automatica.
- Se si tratta di un nome di file host virtuale, con
.vhost
come estensione. - Se si tratta di un file di regole di riscrittura, assegnargli
<site>_rewrite.rules
come suffisso ed estensione. Questa convenzione per i nomi chiarisce a quale sito si rivolge e che si tratta di un insieme di regole di riscrittura. - Se si tratta di un file di regole della whitelist IP, denominalo
<description>_whitelist.rules
come suffisso ed estensione. Questa convenzione per i nomi fornisce una descrizione del suo scopo e del fatto che si tratta di un set di regole di corrispondenza IP.
L’utilizzo di queste convenzioni di denominazione evita problemi se un file viene spostato in una directory di inclusione automatica a cui non appartiene.
Ad esempio, il posizionamento di un file denominato con estensione rules, any o vhost nella cartella di inclusione automatica di /etc/httpd/conf.d/
non avrebbe alcun effetto.
Se una richiesta di modifica della distribuzione riporta please deploy exampleco_rewrite.rules to production dispatchers
, la persona che distribuisce le modifiche può già sapere che non sta aggiungendo un nuovo sito; sta semplicemente aggiornando le regole di riscrittura come indicato dal nome file.
Includi ordine
Quando si estendono funzionalità e configurazioni in Apache Webserver installato su Enterprise Linux, si dispone di alcuni importanti ordini inclusi da comprendere.
A. La Baseline Apache Include
Il file binario Apache inizia con httpd.conf
, che esegue un includeoptional
alle directory conf.d/*.conf
e conf.modules.d/*.conf
.
Come mostrato nel diagramma precedente, il file binario httpd cerca solo il file httpd.conf
come file di configurazione. Tale file contiene le seguenti istruzioni:
Include conf.modules.d/*.conf
IncludeOptional conf.d/*.conf
B. Il livello principale AMS include
Quando abbiamo applicato il nostro standard abbiamo aggiunto alcuni tipi di file aggiuntivi e include.
Di seguito sono elencate le directory della linea di base di AMS e i principali livelli di inclusione
Basandoci sulla linea di base di Apache, viene mostrato come AMS ha creato alcune cartelle aggiuntive e include di primo livello per conf.d
cartelle, nonché directory specifiche per i moduli nidificate in /etc/httpd/conf.dispatcher.d/
Quando Apache viene caricato, estrae /etc/httpd/conf.modules.d/02-dispatcher.conf
e il file include il file binario /etc/httpd/modules/mod_dispatcher.so
nel relativo stato di esecuzione.
LoadModule dispatcher_module modules/mod_dispatcher.so
Per utilizzare il modulo in </VirtualHost>
, viene rilasciato un file di configurazione in /etc/httpd/conf.d/
denominato dispatcher_vhost.conf
, all'interno del quale vengono visualizzati i parametri di base necessari per il funzionamento del modulo:
<IfModule disp_apache2.c>
DispatcherConfig conf.dispatcher.d /dispatcher .any
...SNIP...
</IfModule>
Come puoi notare qui sopra, il file include il file di livello superiore dispatcher.any del modulo Dispatcher per raccogliere i file di configurazione da /etc/httpd/conf.dispatcher.d/dispatcher.any
Presta attenzione al contenuto di questo file:
/farms {
$include "enabled_farms/*_farm.any"
}
Il file dispatcher.any di primo livello include tutti i file della farm abilitati che risiedono in /etc/httpd/conf.dispatcher.d/enabled_farms/
con il nome di file <FILENAME>_farm.any
, che segue la convenzione di denominazione standard.
Più avanti nel file dispatcher_vhost.conf
menzionato in precedenza viene inoltre eseguita un'istruzione include per abilitare ogni file host virtuale abilitato che risiede in /etc/httpd/conf.d/enabled_vhosts/
con il nome file di <FILENAME>.vhost
, che segue la convenzione di denominazione standard.
IncludeOptional /etc/httpd/conf.d/enabled_vhosts/*.vhost
In ciascuno dei nostri file .vhost noterai che il modulo dispatcher viene inizializzato come gestore di file predefinito per una directory. Ecco un esempio di file .vhost per mostrare la sintassi:
<VirtualHost *:80>
ServerName "weretail"
ServerAlias www.weretail.com weretail.com
<Directory />
<IfModule disp_apache2.c>
....SNIP....
SetHandler dispatcher-handler
</IfModule>
....SNIP....
</Directory>
....SNIP....
</VirtualHost>
Dopo che il livello superiore include la risoluzione, hanno altre inclusioni secondarie che vale la pena menzionare. Ecco un diagramma di alto livello su come i file farm e vhosts includono altri elementi secondari
C. L'host virtuale AMS include
Quando un file .vhost della directory /etc/httpd/conf.d/availabled_vhosts/
viene collegato alla directory /etc/httpd/conf.d/enabled_vhosts/
, verrà utilizzato nella configurazione in esecuzione.
I file .vhost hanno inclusioni secondarie in base ai pezzi comuni che abbiamo trovato. Cose come variabili, whitelist e regole di riscrittura.
Il file .vhost includerà istruzioni per ciascun file in base alla posizione in cui devono essere incluse nel file .vhost. Di seguito è riportato un esempio di sintassi di un file .vhost come buon riferimento:
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
Come puoi vedere nell’esempio precedente, esiste un’inclusione per le variabili necessarie in questo file di configurazione che vengono successivamente utilizzate.
All'interno del file /etc/httpd/conf.d/variables/weretail.vars
è possibile vedere quali variabili sono definite:
Define MAIN_DOMAIN dev.weretail.com
È inoltre possibile visualizzare una riga che include un elenco di file whitelist.rules che limitano gli utenti autorizzati a visualizzare il contenuto in base a criteri diversi. Esaminiamo il contenuto di uno dei file della whitelist /etc/httpd/conf.d/whitelists/weretail_mainoffice_whitelist.rules
:
<RequireAny>
Require ip 192.150.16.0/23
</RequireAny>
È inoltre possibile visualizzare una riga che include un set di regole di riscrittura. Diamo un'occhiata al contenuto del file weretail_rewrite.rules
:
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]
D. La farm AMS include
Quando uno qualsiasi dei file <FILENAME>_farm.any
della directory /etc/httpd/conf.dispatcher.d/available_farms/
viene collegato alla directory /etc/httpd/conf.dispatcher.d/enabled_farms/
, verrà utilizzato nella configurazione in esecuzione.
I file della farm contengono sottoinclusioni basate su sezioni di primo livello della farm come cache, clientheaders, filtri, rendering e vhosts.
I file <FILENAME>_farm.any
avranno istruzioni di inclusione per ciascun file in base alla posizione in cui devono essere inclusi nel file farm. Di seguito è riportata una sintassi di esempio di un file <FILENAME>_farm.any
come riferimento valido:
/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....
}
}
Poiché è possibile vedere ogni sezione per la farm weretail invece di avere tutta la sintassi necessaria, si utilizza invece un’istruzione "include".
Esaminiamo la sintassi di alcune di queste inclusioni per avere l'idea di come apparirebbe ogni sotto inclusione come /etc/httpd/conf.dispatcher.d/vhosts/weretail_publish_vhosts.any
:
"brand1.weretail.com"
"brand2.weretail.com"
"www.weretail.comf"
Come puoi vedere, si tratta di un nuovo elenco di nomi di dominio separati da righe che deve essere riprodotto da questa farm rispetto agli altri.
Esaminiamo ora /etc/httpd/conf.dispatcher.d/filters/weretail_search_filters.any
:
/400 { /type "allow" /method "GET" /path "/bin/weretail/lists/*" /extension "json" }
/401 { /type "allow" /method "POST" /path "/bin/weretail/search/" /extension "html" }