配置文件说明 | AEM
描述 description
环境
Experience Manager
问题/症状
本文档对在AdobeManaged Services中配置的标准内置Dispatcher服务器中部署的每个配置文件进行了细分和说明。 它们的使用、命名惯例等。
命名约定
使用include或include可选语句定位文件时,Apache Webserver实际上并不关心文件的文件扩展名。 用能消除冲突和混淆的名称正确命名它们很有帮助。 使用的名称将描述应用文件的范围,它使工作更轻松。 如果所有东西都命名为.conf ,这会让人感到非常困惑。 避免文件和扩展名命名不正确。
以下是典型AMS配置的Dispatcher中使用的各种自定义文件扩展名和命名约定的列表。
conf.d/ 中包含的文件
<
文件名>
.conf<
文件名>
.vhost暂存: /etc/httpd/conf.d/available_vhosts/
活动:
/etc/httpd/conf.d/enabled_vhosts/
*注意: .vhost文件不应复制到enabled_vhosts文件夹中,而是使用指向available_vhosts/ .vhost文件的相对路径的符号链接
<
个虚拟主机>
条目以匹配主机名,并允许Apache使用不同的规则处理每个域流量。 从.vhost文件中,其他文件,如重写、列入白名单等 中包含。<
文件名>
_rewrite.rules*_rewrite.rules
文件存储mod_rewrite
规则,将由vhost文件显式包含和使用<
文件名>
_whitelist.rulesconf.modules.d/ 中包含的文件
<
文件名>
.any<
文件名>
_farm.any已暂存
:
/etc/httpd/conf.dispatcher.d/available_farms/
活动
:
/etc/httpd/conf.dispatcher.d/enabled_farms/
*注意:这些场文件将不会复制到enabled_farms文件夹中,而是使用指向available_farms/ _farm.any文件的相对路径的符号链接
它将从dispatcher.any文件中按名称自动包含它们。
基线场文件以000 开头,以确保先加载它们。
自定义场文件应在100_开始编号方案后加载,以确保正确包含行为。
<
文件名>
_filters.any<
文件名>
_vhosts.any<
文件名>
_cache.any<
文件名>
_invalidate_allowed.any<
文件名>
_clientheaders.any<
文件名>
_renders.any已避免的问题
在遵循命名惯例时,请避免某些容易出错且可能造成灾难性结果的错误。 让我们看几个例子。
问题示例
作为站点示例,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/*.conf
和conf.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" }