配置文件说明 | AEM

浏览AdobeManaged Services Dispatcher服务器中配置文件的深入细分。 揭示它们的意义、命名惯例和实际应用。

描述 description

环境

Experience Manager

问题/症状

本文档对在AdobeManaged Services中配置的标准内置Dispatcher服务器中部署的每个配置文件进行了细分和说明。 它们的使用、命名惯例等。

命名约定

使用include或include可选语句定位文件时,Apache Webserver实际上并不关心文件的文件扩展名。 用能消除冲突和混淆的名称正确命名它们很有帮助。 使用的名称将描述应用文件的范围,它使工作更轻松。 如果所有东西都命名为.conf ,这会让人感到非常困惑。 避免文件和扩展名命名不正确。

以下是典型AMS配置的Dispatcher中使用的各种自定义文件扩展名和命名约定的列表。

conf.d/ 中包含的文件

文件
文件目标
描述
<文件名> .conf
/etc/httpd/conf.d/
默认的Enterprise Linux安装使用此文件扩展名和include文件夹作为覆盖httpd.conf中的设置的位置,并允许您在Apache中的全局级别添加其他功能。
<文件名> .vhost

暂存: /etc/httpd/conf.d/available_vhosts/

活动:

/etc/httpd/conf.d/enabled_vhosts/

*注意: .vhost文件不应复制到enabled_vhosts文件夹中,而是使用指向available_vhosts/ .vhost文件的相对路径的符号链接

*.vhost (虚拟主机)文件是<个虚拟主机>  条目以匹配主机名,并允许Apache使用不同的规则处理每个域流量。 从.vhost文件中,其他文件,如重写、列入白名单等 中包含。
<文件名> _rewrite.rules
/etc/httpd/conf.d/rewrites/
*_rewrite.rules文件存储mod_rewrite规则,将由vhost文件显式包含和使用
<文件名> _whitelist.rules
/etc/httpd/conf.d/whitelists/
*_ipwhitelist.rules文件包含在*.vhost文件中。 它包含IP正则表达式或允许拒绝规则,以允许将IP列入白名单。 如果您试图根据IP地址限制对虚拟主机的查看,您将生成这些文件之一,并将其包含在*.vhost文件中

conf.modules.d/ 中包含的文件

文件
文件目标
描述
<文件名> .any
/etc/httpd/conf.dispatcher.d/
AEM Dispatcher Apache模块从*.any文件获得其设置。 默认的父包含文件为conf.dispatcher.d/dispatcher.any
<文件名> _farm.any

已暂存



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

活动



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

*注意:这些场文件将不会复制到enabled_farms文件夹中,而是使用指向available_farms/ _farm.any文件的相对路径的符号链接

*farm.any文件包含在conf.dispatcher.d/dispatcher.any文件中。 这些父场文件可用于控制每个渲染或网站类型的模块行为。 文件在available_farms目录中创建,并通过符号链接启用enabled_farms目录。

它将从dispatcher.any文件中按名称自动包含它们。

基线场文件以000
​开头,以确保先加载它们。

自定义场文件应在100_开始编号方案后加载,以确保正确包含行为。
<文件名> _filters.any
/etc/httpd/conf.dispatcher.d/filters/
*_filters.any文件包含在conf.dispatcher.d/enabled_farms/*_farm.any文件中。 每个场都有一组规则,这些规则会更改应该过滤掉的流量,而不是发送给渲染程序。
<文件名> _vhosts.any
/etc/httpd/conf.dispatcher.d/vhosts/
*_vhosts.any文件包含在conf.dispatcher.d/enabled_farms/*_farm.any文件中。 这些文件是主机名或URI路径的列表,将通过blob匹配来匹配,以确定使用哪个渲染器为该请求提供服务
<文件名> _cache.any
/etc/httpd/conf.dispatcher.d/cache/
*_cache.any文件包含在conf.dispatcher.d/enabled_farms/*_farm.any文件中。 这些文件指定缓存哪些项目以及不缓存哪些项目
<文件名> _invalidate_allowed.any
/etc/httpd/conf.dispatcher.d/cache/
*_invalidate_allowed.any文件包含在conf.dispatcher.d/enabled_farms/*_farm.any文件中。 它们指定允许哪些IP地址发送刷新和失效请求。
<文件名> _clientheaders.any
/etc/httpd/conf.dispatcher.d/clientheaders/
*_clientheaders.any文件包含在conf.dispatcher.d/enabled_farms/*_farm.any文件中。 它们指定应将哪些客户端标头传递到每个渲染程序。
<文件名> _renders.any
/etc/httpd/conf.dispatcher.d/renders/
*_renders.any文件包含在conf.dispatcher.d/enabled_farms/*_farm.any文件中。 它们为每个渲染器指定IP、端口和超时设置。 正确的渲染器可以是Livecycle服务器或Dispatcher可以从中获取/代理请求的任何AEM系统

已避免的问题

在遵循命名惯例时,请避免某些容易出错且可能造成灾难性结果的错误。 让我们看几个例子。

问题示例

作为站点示例,ExampleCo由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]

潜在危险

A。文件名相同。

如果意外地将vhost文件放入rewrites文件夹中,并且将rewrites文件放入vhosts文件夹中。 它似乎已按文件名正确部署,但Apache引发错误,问题并不明显。

这通常如何成为一个问题?

如果将这两个文件下载到同一位置,则它们可能会自行覆盖或使其无法区分,从而使部署过程变得十分恶劣。

B。文件扩展名相同且容易自动包含

文件扩展名相同,并且使用自动包含的扩展名,因此Apache自动将任何.conf文件包含在其多个默认文件夹中。

这通常如何变成问题?

如果将扩展名为.conf的vhost文件放置在/etc/httpd/conf.d/文件夹中,它将尝试将其加载到Apache上的内存中(通常正常),但如果将扩展名为.conf的重写规则文件放置在/etc/httpd/conf.d/文件夹中,它将自动包含并全局应用,从而导致混乱和不需要的结果。

解决方法 resolution

根据文件的操作命名文件,并安全地退出自动包含规则命名空间。

  • 如果是虚拟主机文件名,则使用.vhost作为扩展名。
  • 如果是重写规则文件,请将其命名为<site>_rewrite.rules作为后缀和扩展名。 这种命名惯例清楚说明它是用于哪个站点,并且它是一组重写规则。
  • 如果它是IP白名单规则文件,请将其命名为<description>_whitelist.rules作为后缀和扩展名。 此命名约定给出了一些说明,说明了它的用途以及它是一组IP匹配规则。

使用这些命名惯例可避免将文件移动到其不所属的自动包含目录中时出现的问题。

例如,将名为.rules、.any或.vhost的文件放置在/etc/httpd/conf.d/的自动包含文件夹中不会产生任何效果。

如果部署更改请求显示please deploy exampleco_rewrite.rules to production dispatchers,则部署更改的人员可能已经知道他们不是在添加新站点;他们只是更新文件名所指示的重写规则。

包含订单

在Enterprise Linux上安装的Apache Webserver中扩展功能和配置时,您有一些重要的 包含订单,您需要了解这些订单。

A. Apache基线包括

Apache二进制文件以httpd.conf开头,对conf.d/*.confconf.modules.d/*.conf目录执行includeoptional操作。

如上图所示,httpd二进制文件仅将httpd.conf文件视为配置文件。 该文件包含以下语句:

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

B. AMS顶级包含

在应用标准时,我们添加了其他文件类型,并包括我们自己的文件类型。

以下是AMS基准目录,最上层包括

基于Apache的基线,我们展示了AMS如何为conf.d文件夹以及嵌套在/etc/httpd/conf.dispatcher.d/下的模块特定目录创建一些其他文件夹和顶级包含

当Apache加载时,它会拉入/etc/httpd/conf.modules.d/02-dispatcher.conf,并且该文件将二进制文件/etc/httpd/modules/mod_dispatcher.so纳入到其运行状态。

LoadModule dispatcher_module modules/mod_dispatcher.so

要在</VirtualHost>中使用模块,我们将配置文件拖放到名为dispatcher_vhost.conf/etc/httpd/conf.d/中,在该文件中,您将看到使用设置模块工作所需的基本参数:

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

如上所示,这包括适用于Dispatcher模块的顶级dispatcher.any文件,以从/etc/httpd/conf.dispatcher.d/dispatcher.any中获取其配置文件

请注意此文件的内容:

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

顶级dispatcher.any文件包括在/etc/httpd/conf.dispatcher.d/enabled_farms/中生活的所有启用场文件,其文件名为<FILENAME>_farm.any,遵循我们的标准命名约定。

稍后在前面提到的dispatcher_vhost.conf文件中,我们还执行了include语句,以启用每个启用的、文件名为<FILENAME>.vhost且位于/etc/httpd/conf.d/enabled_vhosts/中的虚拟主机文件,这些文件遵循我们的标准命名约定。

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

在每个.vhost文件中,您都会注意到Dispatcher模块作为目录的默认文件处理程序进行初始化。 下面是一个示例.vhost文件,其中显示了语法:

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

在顶级包含解析后,它们会具有其他值得一提的子包含。 以下是一个高级图表,说明了场和vhosts文件如何包含其他子元素

C. AMS虚拟主机包括

当来自/etc/httpd/conf.d/availabled_vhosts/目录的任何.vhost文件被符号链接到/etc/httpd/conf.d/enabled_vhosts/目录时,它们将在运行配置中使用。

.vhost文件包含基于我们找到的公共部分的sub include。 变量、白名单和重写规则等内容。

.vhost文件将根据需要包含在.vhost文件中的位置为每个文件包含include语句。 以下是.vhost文件的语法示例,以供参考:

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

如上面的示例所示,此配置文件中有一个include用于以后要使用的变量。

在文件/etc/httpd/conf.d/variables/weretail.vars中,我们可以看到定义了哪些变量:

Define MAIN_DOMAIN dev.weretail.com

您还可以看到一行,其中包含一个whitelist.rules文件列表,这些文件根据不同的白名单条件限制可以查看此内容的用户。 让我们查看白名单文件/etc/httpd/conf.d/whitelists/weretail_mainoffice_whitelist.rules的内容:

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

您还可以看到包含一组重写规则的行。 让我们看一下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. AMS场包含

当来自/etc/httpd/conf.dispatcher.d/available_farms/目录的任何<FILENAME>_farm.any文件被符号链接到/etc/httpd/conf.dispatcher.d/enabled_farms/目录时,它们将在运行配置中使用。

场文件具有基于场🔗的顶级部分的子包含,如缓存、clientheaders、筛选器、渲染器和主机。

<FILENAME>_farm.any文件将根据需要在场文件中包含它们的位置,为每个文件包含include语句。 以下是<FILENAME>_farm.any文件的示例语法,作为良好引用:

/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....
 }
}

由于您可以看到weretail场的每个部分,但没有获得所需的所有语法,因此请使用include语句。

让我们看一下其中几个包含的语法,以了解每个子包含的内容会是什么样的/etc/httpd/conf.dispatcher.d/vhosts/weretail_publish_vhosts.any

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

如您所见,这是一个新的以行分隔的域名列表,应从该场呈现域名,而不是其他场。

接下来,我们查看/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" }
recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f