Explicação dos arquivos de configuração | AEM
Descrição description
Ambiente
Experience Manager
Problema/Sintomas
Este documento detalha e explica cada um dos arquivos de configuração implantados em um servidor Dispatcher padrão criado no Adobe Managed Services. Seu uso, convenção de nomenclatura etc.
Convenção de Nomenclatura
Na verdade, o Apache Webserver não se importa com a extensão de arquivo ao direcioná-la com uma instrução Incluir ou Incluir opcional. A nomenclatura correta com nomes que eliminam conflitos e confusão ajuda muito. Os nomes usados descreverão o escopo de aplicação do arquivo, facilitando a vida. Se tudo é chamado .conf isso fica realmente confuso. Evite arquivos e extensões mal nomeados.
Abaixo está uma lista das diferentes extensões de arquivo personalizadas e convenções de nomenclatura usadas em uma Dispatcher configurada típica do AMS.
Arquivos contidos em conf.d/
<
NOME DO ARQUIVO>
.conf<
NOME DO ARQUIVO>
.vhostPreparado: /etc/httpd/conf.d/available_vhosts/
Ativo:
/etc/httpd/conf.d/enabled_vhosts/
*Observação: os arquivos .vhost não devem ser copiados para a pasta enabled_vhosts, mas use symlinks para um caminho relativo para o arquivo available_vhosts/ .vhost
<
VirtualHosts >
entradas para corresponder aos nomes de host e permitir que o Apache manipule cada tráfego de domínio com regras diferentes. Do arquivo .vhost, outros arquivos como regravações, listas de permissões etc. está incluído.<
FILENAME>
_rewrite.rules*_rewrite.rules
arquivos armazenam mod_rewrite
regras a serem incluídas e consumidas explicitamente por um arquivo vhost<
FILENAME>
_whitelist.rulesArquivos contidos em conf.modules.d/
<
NOME DO ARQUIVO>
.any<
FILENAME>
_farm.anyPreparados
:
/etc/httpd/conf.dispatcher.d/available_farms/
Ativos
:
/etc/httpd/conf.dispatcher.d/enabled_farms/
*Observação: esses arquivos de farm não devem ser copiados para a pasta enabled_farms, mas usam symlinks para um caminho relativo para o arquivo available_farms/ _farm.any
Ele os inclui automaticamente pelo nome a partir do arquivo dispatcher.any.
Os arquivos do farm de linha de base começam com 000 para verificar se foram carregados primeiro.
Os arquivos de farm personalizados devem ser carregados depois de, iniciando o esquema de número em 100_ para garantir o comportamento de inclusão adequado.
<
FILENAME>
_filters.any<
FILENAME>
_vhosts.any<
FILENAME>
_cache.any<
FILENAME>
_invalidate_allowed.any<
FILENAME>
_clientheaders.any<
FILENAME>
_renders.anyProblemas evitados
Ao seguir a convenção de nomenclatura, evite alguns erros muito fáceis de cometer que possam ter resultados catastróficos. Vamos ver alguns exemplos.
Exemplo de problema
Como um exemplo de site para ExampleCo, dois arquivos de configuração são criados pelos desenvolvedores das configurações do 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]
PERIGO POTENCIAL
A Os nomes de arquivo são iguais.
Se o arquivo vhost for colocado acidentalmente na pasta de regravações, e o arquivo de regravações for colocado na pasta vhosts. Parece que foi implantado pelo nome de arquivo corretamente, mas o Apache emite um erro e o problema não é imediatamente aparente.
Como isso geralmente se torna um problema?
Se os dois arquivos forem baixados no mesmo local, eles poderão se substituir ou torná-los indistinguíveis, tornando o processo de implantação um pesadelo.
B As extensões de arquivo são iguais e têm inclusão automática
As extensões de arquivo são as mesmas e usam a extensão incluída automaticamente que o Apache inclui automaticamente quaisquer arquivos .conf em muitas de suas pastas padrão.
Como isso normalmente se torna um problema?
Se o arquivo vhost com a extensão .conf for colocado na pasta /etc/httpd/conf.d/ ele tentará carregá-lo na memória no Apache, o que geralmente é ok, mas se o arquivo de regras de regravação com a extensão .conf for colocado na pasta /etc/httpd/conf.d/
, ele será incluído automaticamente e aplicado globalmente, causando resultados confusos e indesejados.
Resolução resolution
Nomeie os arquivos com base no que eles fazem e com segurança fora do namespace de regras de inclusão automática.
- Se for um arquivo de host virtual, nomeie-o com
.vhost
como extensão. - Se for um arquivo de regra de regravação, nomeie-o com
<site>_rewrite.rules
como sufixo e extensão. Essa convenção de nomenclatura deixa claro para qual site é destinado e que é um conjunto de regras de regravação. - Se for um arquivo de regra de lista de permissões de IP, nomeie-o
<description>_whitelist.rules
como sufixo e extensão. Essa convenção de nomenclatura oferece uma descrição do que é para e que é um conjunto de regras de correspondência de IP.
O uso dessas convenções de nomenclatura evita problemas se um arquivo for movido para um diretório de inclusão automática ao qual não pertence.
Por exemplo, colocar um arquivo com o nome .rules, .any ou .vhost na pasta de inclusão automática de /etc/httpd/conf.d/
não teria nenhum efeito.
Se uma solicitação de alteração de implantação informar please deploy exampleco_rewrite.rules to production dispatchers
, a pessoa que está implantando as alterações já poderá saber que não está adicionando um novo site; ela estará apenas atualizando as regras de regravação conforme indicado pelo nome do arquivo.
Incluir pedido
Ao estender a funcionalidade e as configurações no Apache Webserver instalado no Enterprise Linux, você tem alguns pedidos de inclusão importantes que gostaria de entender.
A. Inclusões de linha de base do Apache
O binário do Apache começa com httpd.conf
, que faz um includeoptional
aos diretórios conf.d/*.conf
e conf.modules.d/*.conf
.
Como visto no diagrama acima, o binário httpd só procura o arquivo httpd.conf
como seu arquivo de configuração. Esse arquivo contém as seguintes declarações:
Include conf.modules.d/*.conf
IncludeOptional conf.d/*.conf
B. Inclusões de nível superior do AMS
Quando aplicamos nosso padrão, adicionamos alguns tipos de arquivos adicionais e inclusões próprias.
Estes são os diretórios da linha de base do AMS e os inclusões de nível superior
Desenvolvendo a linha de base do Apache, mostramos como o AMS criou algumas pastas adicionais e inclusões de nível superior para conf.d
pastas, bem como diretórios específicos do módulo aninhados em /etc/httpd/conf.dispatcher.d/
Quando o Apache é carregado, ele é extraído para /etc/httpd/conf.modules.d/02-dispatcher.conf
e esse arquivo inclui o arquivo binário /etc/httpd/modules/mod_dispatcher.so
em seu estado de execução.
LoadModule dispatcher_module modules/mod_dispatcher.so
Para usar o módulo em nosso </VirtualHost>
, soltamos um arquivo de configuração no /etc/httpd/conf.d/
chamado dispatcher_vhost.conf
e, dentro desse arquivo, você verá usar a configuração dos parâmetros básicos necessários para que o módulo funcione:
<IfModule disp_apache2.c>
DispatcherConfig conf.dispatcher.d /dispatcher .any
...SNIP...
</IfModule>
Como você pode ver acima, isso inclui o arquivo dispatcher.any de nível superior para que o módulo Dispatcher selecione os arquivos de configuração do /etc/httpd/conf.dispatcher.d/dispatcher.any
Preste atenção ao conteúdo deste arquivo:
/farms {
$include "enabled_farms/*_farm.any"
}
O arquivo dispatcher.any de nível superior inclui todos os arquivos de farm habilitados no /etc/httpd/conf.dispatcher.d/enabled_farms/
com o nome de arquivo <FILENAME>_farm.any
, que segue a convenção de nomenclatura padrão.
Em uma parte posterior do arquivo dispatcher_vhost.conf
mencionado anteriormente, também fazemos uma instrução include para habilitar cada arquivo de host virtual habilitado que esteja em /etc/httpd/conf.d/enabled_vhosts/
com o nome de arquivo <FILENAME>.vhost
, que segue nossa convenção de nomenclatura padrão.
IncludeOptional /etc/httpd/conf.d/enabled_vhosts/*.vhost
Em cada um de nossos arquivos .vhost, você observará que o módulo do dispatcher é inicializado como um manipulador de arquivo padrão para um diretório. Este é um exemplo de arquivo .vhost para mostrar a sintaxe:
<VirtualHost *:80>
ServerName "weretail"
ServerAlias www.weretail.com weretail.com
<Directory />
<IfModule disp_apache2.c>
....SNIP....
SetHandler dispatcher-handler
</IfModule>
....SNIP....
</Directory>
....SNIP....
</VirtualHost>
Depois que o nível superior inclui resolver eles têm outras sub-inclusões que valem a pena mencionar. Este é um diagrama de alto nível sobre como os arquivos farms e vhosts incluem outros elementos secundários
C. O Host Virtual AMS Inclui
Quando qualquer arquivo .vhost do diretório /etc/httpd/conf.d/availabled_vhosts/
for vinculado ao diretório /etc/httpd/conf.d/enabled_vhosts/
, ele será usado na configuração em execução.
Os arquivos .vhost têm sub-inclusões com base em partes comuns encontradas. Coisas como variáveis, listas de permissões e regras de regravação.
O arquivo .vhost terá instruções de inclusão para cada arquivo com base em onde elas precisam ser incluídas no arquivo .vhost. Este é um exemplo de sintaxe de um arquivo .vhost como uma boa referência:
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
Como você pode ver no exemplo acima, há uma inclusão para as variáveis necessárias nesse arquivo de configuração que serão usadas posteriormente.
Dentro do arquivo /etc/httpd/conf.d/variables/weretail.vars
, podemos ver quais variáveis estão definidas:
Define MAIN_DOMAIN dev.weretail.com
Você também pode ver uma linha que inclui uma lista de arquivos whitelist.rules que restringem quem pode exibir esse conteúdo com base em diferentes critérios de whitelist. Vamos examinar o conteúdo de um dos arquivos da lista de permissões /etc/httpd/conf.d/whitelists/weretail_mainoffice_whitelist.rules
:
<RequireAny>
Require ip 192.150.16.0/23
</RequireAny>
Você também pode ver uma linha que inclui um conjunto de regras de regravação. Vamos analisar o conteúdo do arquivo 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. Inclusões do Farm do AMS
Quando qualquer arquivo <FILENAME>_farm.any
do diretório /etc/httpd/conf.dispatcher.d/available_farms/
for vinculado ao diretório /etc/httpd/conf.dispatcher.d/enabled_farms/
, ele será usado na configuração em execução.
Os arquivos do farm têm subinclusões com base em seções de nível superior do farm, como cache, clientheaders, filtros, renderizadores e vhosts.
Os arquivos <FILENAME>_farm.any
terão instruções de inclusão para cada arquivo com base em onde eles precisam ser incluídos no arquivo farm. Este é um exemplo de sintaxe de um arquivo <FILENAME>_farm.any
como uma boa referência:
/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....
}
}
Como você pode ver cada seção do farm weretail em vez de ter toda a sintaxe necessária, ela usará uma instrução include.
Vamos examinar a sintaxe de alguns desses includes para ter a ideia de como cada sub-include seria /etc/httpd/conf.dispatcher.d/vhosts/weretail_publish_vhosts.any
:
"brand1.weretail.com"
"brand2.weretail.com"
"www.weretail.comf"
Como você pode ver, é uma nova lista separada por linhas de nomes de domínio que deve ser renderizada deste farm em relação aos outros.
A seguir, vejamos o /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" }