各个 Dispatcher 版本与 AEM 相互独立。如果单击以前版本 AEM 文档中嵌入的 Dispatcher 文档链接,可能会重定向到此页面。
以下各节介绍如何配置调度程序的各个方面。
AEM和Dispatcher的所有元素都可以安装在IPv4和IPv6网络中。 请参阅IPV4和IPV6。
默认情况下,调度程序配置存储在dispatcher.any
文本文件中,但您可以在安装过程中更改此文件的名称和位置。
配置文件包含一系列单值或多值属性,这些属性控制Dispatcher的行为:
/
。{ }
将子项括起来。示例配置的结构如下:
# name of the dispatcher
/name "internet-server"
# each farm configures a set off (loadbalanced) renders
/farms
{
# first farm entry (label is not important, just for your convenience)
/website
{
/clientheaders
{
# List of headers that are passed on
}
/virtualhosts
{
# List of URLs for this Web site
}
/sessionmanagement
{
# settings for user authentification
}
/renders
{
# List of AEM instances that render the documents
}
/filter
{
# List of filters
}
/vanity_urls
{
# List of vanity URLs
}
/cache
{
# Cache configuration
/rules
{
# List of cachable documents
}
/invalidate
{
# List of auto-invalidated documents
}
}
/statistics
{
/categories
{
# The document categories that are used for load balancing estimates
}
}
/stickyConnectionsFor "/myFolder"
/health_check
{
# Page gets contacted when an instance returns a 500
}
/retryDelay "1"
/numberOfRetries "5"
/unavailablePenalty "1"
/failover "1"
}
}
您可以包括其他对配置有贡献的文件:
例如,要在/farms配置中包含文件myFarm.any,请使用以下代码:
/farms
{
$include "myFarm.any"
}
使用星号(*
)作为通配符,指定要包含的文件范围。
例如,如果文件farm_1.any
到farm_5.any
包含1到5的场配置,则可以按如下方式包括这些配置:
/farms
{
$include "farm_*.any"
}
您可以在dispatcher.any文件中的字符串值属性中使用环境变量,而不是硬编码这些值。 要包含环境变量的值,请使用格式${variable_name}
。
例如,如果dispatcher.any文件与缓存目录位于同一目录中,则可以使用docroot属性的以下值:
/docroot "${PWD}/cache"
另一个示例是,如果创建名为PUBLISH_IP
的环境变量来存储AEM发布实例的主机名,则可以使用/renders属性的以下配置:
/renders {
/0001 {
/hostname "${PUBLISH_IP}"
/port "8443"
}
}
使用/name
属性指定唯一名称以标识Dispatcher实例。 /name
属性是配置结构中的顶级属性。
/farms
属性定义一组或多组调度程序行为,其中每组行为都与不同的网站或URL关联。 /farms
属性可以包括单个农场或多个农场:
/farms
属性是配置结构中的顶级属性。 要定义场,请向/farms
属性添加子属性。 使用属性名称,该属性名称可唯一标识调度程序实例中的场。
/farmname
属性是多值的,并包含定义调度程序行为的其他属性:
该值可以包含任何字母数字(a-z, 0-9)字符。 以下示例显示了名为/daycom
和/docsdaycom
的两个农场的骨架定义:
#name of dispatcher
/name "day sites"
#farms section defines a list of farms or sites
/farms
{
/daycom
{
...
}
/docdaycom
{
...
}
}
如果您使用多个渲染场,则从下到上计算列表。 这在为您的网站定义虚拟主机时尤其相关。
每个农场属性都可以包含以下子属性:
属性名称 | 描述 |
---|---|
/homepage | 默认主页(可选)(仅限IIS) |
/clientheaders | 要传递的客户端HTTP请求的标头。 |
/virtualhosts | 此场的虚拟主机。 |
/会话管理 | 支持会话管理和身份验证。 |
/renders | 提供呈现页面的服务器(通常为AEM发布实例)。 |
/filter | 定义Dispatcher启用访问的URL。 |
/vanity_urls | 配置对虚URL的访问。 |
/propagateSyndPost | 支持转发联合请求。 |
/cache | 配置缓存行为。 |
/statistics | 为负载平衡计算定义统计类别。 |
/stickyConnectionsFor | 包含粘滞文档的文件夹。 |
/health_check | 用于确定服务器可用性的URL。 |
/retryDelay | 重试失败的连接之前的延迟。 |
/unavailableDescument | 影响负载平衡计算统计的惩罚。 |
/failover | 在原始请求失败时向不同呈现重新发送请求。 |
/auth_checker | 有关对权限敏感的缓存,请参阅缓存受保护的内容。 |
/homepage
参数(仅限IIS)不再工作。 而应使用IIS URL重写模块。
如果您使用的是Apache,则应使用mod_rewrite
模块。 有关mod_rewrite
的信息,请参阅Apache网站文档(例如,Apache 2.4)。 使用mod_rewrite
时,建议使用标志**'passthrough|PT'(传递到下一个处理函数)**来强制重写引擎将内部request_rec
结构的uri
字段设置为filename
字段的值。
/clientheaders
属性定义一列表HTTP头,调度程序从客户端HTTP请求传递给渲染器(AEM实例)。
默认情况下,Dispatcher将标准HTTP头转发到AEM实例。 在某些情况下,您可能希望转发其他标题或删除特定标题:
如果要自定义要传递的标题集,则必须指定完整的标题列表,包括通常默认包含的标题。
例如,处理发布实例的页面激活请求的调度程序实例需要/clientheaders
部分中的PATH
头。 PATH
头支持复制代理与调度程序之间的通信。
以下代码是/clientheaders
的一个示例配置:
/clientheaders
{
"CSRF-Token"
"X-Forwarded-Proto"
"referer"
"user-agent"
"authorization"
"from"
"content-type"
"content-length"
"accept-charset"
"accept-encoding"
"accept-language"
"accept"
"host"
"if-match"
"if-none-match"
"if-range"
"if-unmodified-since"
"max-forwards"
"proxy-authorization"
"proxy-connection"
"range"
"cookie"
"cq-action"
"cq-handle"
"handle"
"action"
"cqstats"
"depth"
"translate"
"expires"
"date"
"dav"
"ms-author-via"
"if"
"lock-token"
"x-expected-entity-length"
"destination"
"PATH"
}
/virtualhosts
属性定义调度程序为此场接受的所有主机名/URI组合的列表。 可以使用星号(*
)字符作为通配符。 / virtualhosts
属性的值使用以下格式:
[scheme]host[uri][*]
scheme
:(可选) https://
或 https://.
host
:主机的名称或IP地址以及端口号(如有必要)。(请参阅https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.23)uri
:(可选)资源的路径。以下示例配置处理myCompany的。com和。ch域以及mySubDivision的所有域的请求:
/virtualhosts
{
"www.myCompany.com"
"www.myCompany.ch"
"www.mySubDivison.*"
}
以下配置处理所有请求:
/virtualhosts
{
"*"
}
当调度程序收到HTTP或HTTPS请求时,它会找到与请求的host,
uri
和scheme
头最匹配的虚拟主机值。 调度程序按以下顺序计算virtualhosts
属性中的值:
virtualhosts
属性中最顶部的值开头,并进行值列表。调度程序通过以下方式查找最佳匹配的虚拟主机值:
host
、scheme
和uri
中的所有三个匹配的第一个遇到的虚拟主机。virtualhosts
值具有与请求的scheme
和uri
匹配的scheme
和uri
部分,则使用与请求的host
匹配的第一个遇到的虚拟主机。virtualhosts
值具有与请求主机匹配的主机部分,则使用最顶端场的最顶端虚拟主机。因此,您应将默认虚拟主机放在dispatcher.any
文件最上方的场中virtualhosts
属性的顶部。
以下示例代表dispatcher.any
文件中定义两个调度程序群的片段,每个群定义一个virtualhosts
属性。
/farms
{
/myProducts
{
/virtualhosts
{
"www.mycompany.com"
}
/renders
{
/hostname "server1.myCompany.com"
/port "80"
}
}
/myCompany
{
/virtualhosts
{
"www.mycompany.com/products/*"
}
/renders
{
/hostname "server2.myCompany.com"
/port "80"
}
}
}
在此示例中,下表显示了为给定HTTP请求解析的虚拟主机:
请求URL | 已解析的虚拟主机 |
---|---|
https://www.mycompany.com/products/gloves.html |
www.mycompany.com/products/ |
https://www.mycompany.com/about.html |
www.mycompany.com |
/allowAuthorized
要 启用此功 "0"
能, /cache
必须在部分中设置为。
创建安全会话以访问渲染场,这样用户需要登录才能访问场中的任何页面。 登录后,用户可以访问场中的页面。 有关将此功能用于CUG的信息,请参阅创建已关闭的用户组。 另外,请在上线前参阅调度程序安全清单。
/sessionmanagement
属性是/farms
的子属性。
如果网站的各个部分使用不同的访问要求,您需要定义多个场。
/ sessionmanagementhas多个子参数:
/directory (mandatory)
存储会话信息的目录。 如果目录不存在,则创建该目录。
配置目录子参数时,不指向根文件夹(/directory "/"
),因为它可能导致严重问题。 您应始终指定存储会话信息的文件夹的路径。 例如:
/sessionmanagement
{
/directory "/usr/local/apache/.sessions"
}
/encode (可选)
会话信息的编码方式。 使用md5
表示使用md5算法进行加密,或使用hex
表示十六进制编码。 如果加密会话数据,则具有文件系统访问权限的用户无法读取会话内容。 默认为 md5
.
/header (可选)
存储授权信息的HTTP头或cookie的名称。 如果将信息存储在http头中,请使用HTTP:<header-name>
。 要将信息存储在cookie中,请使用Cookie:<header-name>
。 如果不指定值HTTP:authorization
,则使用。
/timeout (可选)
会话在上次使用后超时的秒数。 如果未指定"800"
,则会话在用户最后一个请求后13分钟多一点超时。
配置示例如下所示:
/sessionmanagement
{
/directory "/usr/local/apache/.sessions"
/encode "md5"
/header "HTTP:authorization"
/timeout "800"
}
/renders属性定义Dispatcher向其发送请求以呈现文档的URL。 以下示例/renders
部分标识用于渲染的单个AEM实例:
/renders
{
/myRenderer
{
# hostname or IP of the renderer
/hostname "aem.myCompany.com"
# port of the renderer
/port "4503"
# connection timeout in milliseconds, "0" (default) waits indefinitely
/timeout "0"
}
}
以下示例/renders部分标识与调度程序在同一台计算机上运行的AEM实例:
/renders
{
/myRenderer
{
/hostname "127.0.0.1"
/port "4503"
}
}
以下示例/renders部分在两个AEM实例之间平均分发呈现请求:
/renders
{
/myFirstRenderer
{
/hostname "aem.myCompany.com"
/port "4503"
}
/mySecondRenderer
{
/hostname "127.0.0.1"
/port "4503"
}
}
/timeout
指定访问AEM实例的连接超时(以毫秒为单位)。 默认值为"0"
,导致调度程序无限期等待。
/receiveTimeout
指定允许响应花费的时间(以毫秒为单位)。 默认值为"600000"
,导致调度程序等待10分钟。 设置"0"
将完全消除超时。
如果解析响应头时达到超时,则返回504的HTTP状态(错误网关)。 如果在读取响应正文时达到超时,调度程序将向客户端返回不完整的响应,但删除可能已写入的任何缓存文件。
/ipv4
指定调度程序是使用getaddrinfo
函数(对于IPv6)还是gethostbyname
函数(对于IPv4)来获取渲染器的IP地址。 值为0将导致使用getaddrinfo
。 值1
会导致使用gethostbyname
。 默认值为 0
.
getaddrinfo
函数返回IP地址列表。 调度程序重复列表地址,直到它建立TCP/IP连接。 因此,当呈现主机名与多个IP地址关联时,ipv4
属性很重要,主机响应getaddrinfo
函数返回始终按相同顺序排列的IP地址列表。 在这种情况下,您应使用gethostbyname
函数,以便Dispatcher连接的IP地址是随机的。
Amazon弹性负载平衡(ELB)是一种对getaddrinfo做出响应的服务,其IP地址的列表可能按相同顺序排列。
/secure
如果/secure
属性的值为"1"
,则调度程序使用HTTPS与AEM实例通信。 有关其他详细信息,另请参阅将调度程序配置为使用SSL。
/always-resolve
在Dispatcher版本4.1.6中,可以按如下方式配置/always-resolve
属性:
"1"
时,将解析每个请求的主机名(调度程序永远不会缓存任何IP地址)。 由于需要额外的呼叫来获取每个请求的主机信息,因此可能会对性能产生轻微影响。此外,当您遇到动态IP解决问题时,可使用此属性,如以下示例所示:
/renders {
/0001 {
/hostname "host-name-here"
/port "4502"
/ipv4 "1"
/always-resolve "1"
}
}
使用/filter
部分指定调度程序接受的HTTP请求。 所有其他请求都会以404错误代码(找不到页面)发回到Web服务器。 如果不存在/filter
部分,则接受所有请求。
/filter
部分由一系列规则组成,这些规则根据HTTP请求的请求行部分的模式拒绝或允许访问内容。 您应对/filter
部分使用允许列表策略:
/filter
部分中的每个项目都包括类型和与请求行或整个请求行的特定元素相匹配的模式。 每个筛选器都可包含以下项:
类型:指示 /type
是否允许或拒绝对与模式匹配的请求进行访问。值可以是allow
或deny
。
请求行的元素: 包括 /method
、 /url
、 /query
或根 /protocol
据HTTP请求的请求行部分的这些特定部分过滤请求的模式。首选的筛选方法是筛选请求行的元素(而不是整个请求行)。
请求行的高级元素:从 Dispatcher 4.2.0开始,有四个新的过滤器元素可供使用。这些新元素分别为/path
、/selectors
、/extension
和/suffix
。 包括一个或多个这些项目以进一步控制URL模式。
有关每个元素引用的请求行的哪一部分的详细信息,请参阅Sling URL分解wiki页。
/glob
属性用于与HTTP请求的整个请求行匹配。在Dispatcher中,已弃用使用globs进行过滤。 因此,应避免在/filter
部分中使用glob,因为这可能会导致安全问题。 因此,不是:
/glob "* *.css *"
您应使用
/url "*.css"
HTTP/1.1按如下方式定义request-line:
Method Request-URI HTTP-Version<CRLF>
<CRLF>
字符表示回车后跟换行符。 以下示例是客户端请求WKND站点的“美英”页面时收到的请求行:
GET /content/wknd/us/en.html HTTP.1.1<CRLF>
您的模式必须考虑请求行中的空格字符和<CRLF>
字符。
创建筛选器规则时,对于简单模式,请使用多次引号"pattern"
。 如果您使用的是Dispatcher 4.2.0或更高版本,并且您的模式包含常规表达式,则必须将正则表达式模式'(pattern1|pattern2)'
括在单引号中。
在高于4.2.0的Dispatcher版本中,您可以在筛选器模式中包含POSIX Extended Regular表达式。
如果您的过滤器没有按照预期的方式触发,请在调度程序上启用跟踪日志记录,以便您能够看到哪个过滤器正在拦截请求。
以下示例过滤器部分导致调度程序拒绝所有文件的请求。 您应拒绝访问所有文件,然后允许访问特定区域。
/0001 { /glob "*" /type "deny" }
对明确拒绝的区域的请求导致返回404错误代码(找不到页面)。
过滤器还允许您拒绝访问各种元素,例如ASP页面和发布实例中的敏感区域。 以下筛选器拒绝访问ASP页面:
/0002 { /type "deny" /url "*.asp" }
以下示例筛选器允许使用POST方法提交表单数据:
/filter {
/0001 { /glob "*" /type "deny" }
/0002 { /type "allow" /method "POST" /url "/content/[.]*.form.html" }
}
以下示例显示了用于拒绝对工作流控制台进行外部访问的筛选器:
/filter {
/0001 { /glob "*" /type "deny" }
/0002 { /type "allow" /url "/libs/cq/workflow/content/console*" }
}
如果您的发布实例使用Web应用程序上下文(例如发布),也可以将其添加到筛选器定义中。
/0003 { /type "deny" /url "/publish/libs/cq/workflow/content/console/archive*" }
如果您仍需要访问受限区域内的单个页面,则可以允许访问这些页面。 例如,要允许访问“工作流”控制台中的“存档”选项卡,请添加以下部分:
/0004 { /type "allow" /url "/libs/cq/workflow/content/console/archive*" }
当多个过滤器模式应用于请求时,应用的最后一个过滤模式将有效。
此过滤器使用常规表达式启用非公共内容目录中的扩展,在单引号之间定义:
/005 { /type "allow" /extension '(css|gif|ico|js|png|swf|jpe?g)' }
下面是一个规则示例,它使用路径、选择器和扩展的过滤器阻止从/content
路径及其子树捕获的内容:
/006 {
/type "deny"
/path "/content/*"
/selectors '(feed|rss|pages|languages|blueprint|infinity|tidy)'
/extension '(json|xml|html)'
}
配置Dispatcher时,应尽可能限制外部访问。 以下示例为外部访客提供了最低访问权限:
/content
设计和客户端库等杂项内容;例如:
/etc/designs/default*
/etc/designs/mydesign*
创建过滤器后,测试页访问以确保AEM实例安全。
dispatcher.any
文件的以下/filter
部分可用作调度程序配置文件的基础。
此示例基于随Dispatcher提供的默认配置文件,它打算作为在生产环境中使用的示例。 以#
开头的项被取消激活(注释掉),如果您决定激活其中任何项(通过删除该行上的#
),应当小心,因为这可能会对安全产生影响。
您应拒绝访问所有内容,然后允许访问特定(受限)元素:
/filter
{
# Deny everything first and then allow specific entries
/0001 { /type "deny" /glob "*" }
# Open consoles
# /0011 { /type "allow" /url "/admin/*" } # allow servlet engine admin
# /0012 { /type "allow" /url "/crx/*" } # allow content repository
# /0013 { /type "allow" /url "/system/*" } # allow OSGi console
# Allow non-public content directories
# /0021 { /type "allow" /url "/apps/*" } # allow apps access
# /0022 { /type "allow" /url "/bin/*" }
/0023 { /type "allow" /url "/content*" } # disable this rule to allow mapped content only
# /0024 { /type "allow" /url "/libs/*" }
# /0025 { /type "deny" /url "/libs/shindig/proxy*" } # if you enable /libs close access to proxy
# /0026 { /type "allow" /url "/home/*" }
# /0027 { /type "allow" /url "/tmp/*" }
# /0028 { /type "allow" /url "/var/*" }
# Enable extensions in non-public content directories, using a regular expression
/0041
{
/type "allow"
/extension '(css|gif|ico|js|png|swf|jpe?g)'
}
# Enable features
/0062 { /type "allow" /url "/libs/cq/personalization/*" } # enable personalization
# Deny content grabbing, on all accessible pages, using regular expressions
/0081
{
/type "deny"
/selectors '((sys|doc)view|query|[0-9-]+)'
/extension '(json|xml)'
}
# Deny content grabbing for /content and its subtree
/0082
{
/type "deny"
/path "/content/*"
/selectors '(feed|rss|pages|languages|blueprint|infinity|tidy)'
/extension '(json|xml|html)'
}
# /0087 { /type "allow" /method "GET" /extension 'json' "*.1.json" } # allow one-level json requests
}
当与Apache一起使用时,请根据Dispatcher模块的DispatcherUseProcessedURL属性设计您的过滤器URL模式。 (请参阅Apache Web Server —— 为Dispatcher配置Apache Web Server。)
与Dynamic Media相关的过滤器0030
和0031
适用于AEM 6.0及更高版本。
如果您选择扩展访问权限,请考虑以下建议:
如果您使用的是CQ 5.4版或更早版本,则对/admin
的外部访问应始终完全禁用。
允许访问/libs
中的文件时,必须小心。 应允许个人访问。
拒绝对复制配置的访问,因此无法看到:
/etc/replication.xml*
/etc/replication.infinity.json*
拒绝访问Google小工具反向代理:
/libs/opensocial/proxy*
根据您的安装,/libs
、/apps
或其他位置可能有其他资源,必须提供这些资源。 可以使用access.log
文件作为确定外部访问的资源的一种方法。
对控制台和目录的访问可能会对生产环境带来安全风险。 除非您有明确的理由,否则它们应保持停用(注释掉)。
如果在发布环境中使用报告,则应将Dispatcher配置为拒绝对外部访客的/etc/reports
访问。
自从Dispatcher 4.1.5版起,请使用/filter
部分限制查询字符串。 强烈建议通过allow
筛选器元素显式允许查询字符串和排除通用允许。
单个条目可以具有glob
或method
、url
、query
和version
的某些组合,但不能同时具有这两个组合。 以下示例允许a=*
查询字符串并拒绝解析到/etc
节点的URL的所有其他查询字符串:
/filter {
/0001 { /type "deny" /method "POST" /url "/etc/*" }
/0002 { /type "allow" /method "GET" /url "/etc/*" /query "a=*" }
}
如果规则包含/query
,则它将仅匹配包含查询字符串的请求并与提供的查询模式匹配。
在上例中,如果对没有查询字符串的/etc
的请求也应允许,则需要以下规则:
/filter {
>/0001 { /type "deny" /method “*" /url "/path/*" }
>/0002 { /type "allow" /method "GET" /url "/path/*" }
>/0003 { /type “deny" /method "GET" /url "/path/*" /query "*" }
>/0004 { /type "allow" /method "GET" /url "/path/*" /query "a=*" }
}
调度程序过滤器应阻止访问AEM发布实例上的以下页面和脚本。 使用Web浏览器尝试像站点访客一样打开以下页面并验证是否返回代码404。 如果获得了任何其他结果,请调整过滤器。
请注意,您应当看到/content/add_valid_page.html?debug=layout
的普通页面呈现。
/admin
/system/console
/dav/crx.default
/crx
/bin/crxde/logs
/jcr:system/jcr:versionStorage.json
/_jcr_system/_jcr_versionStorage.json
/libs/wcm/core/content/siteadmin.html
/libs/collab/core/content/admin.html
/libs/cq/ui/content/dumplibs.html
/var/linkchecker.html
/etc/linkchecker.html
/home/users/a/admin/profile.json
/home/users/a/admin/profile.xml
/libs/cq/core/content/login.json
/content/../libs/foundation/components/text/text.jsp
/content/.{.}/libs/foundation/components/text/text.jsp
/apps/sling/config/org.apache.felix.webconsole.internal.servlet.OsgiManager.config/jcr%3acontent/jcr%3adata
/libs/foundation/components/primary/cq/workflow/components/participants/json.GET.servlet
/content.pages.json
/content.languages.json
/content.blueprint.json
/content.-1.json
/content.10.json
/content.infinity.json
/content.tidy.json
/content.tidy.-1.blubber.json
/content/dam.tidy.-100.json
/content/content/geometrixx.sitemap.txt
/content/add_valid_page.query.json?statement=/*
/content/add_valid_page.qu%65ry.js%6Fn?statement=/*
/content/add_valid_page.query.json?statement=/*[@transportPassword]/(@transportPassword%20|%20@transportUri%20|%20@transportUser)
/content/add_valid_path_to_a_page/_jcr_content.json
/content/add_valid_path_to_a_page/jcr:content.json
/content/add_valid_path_to_a_page/_jcr_content.feed
/content/add_valid_path_to_a_page/jcr:content.feed
/content/add_valid_path_to_a_page/pagename._jcr_content.feed
/content/add_valid_path_to_a_page/pagename.jcr:content.feed
/content/add_valid_path_to_a_page/pagename.docview.xml
/content/add_valid_path_to_a_page/pagename.docview.json
/content/add_valid_path_to_a_page/pagename.sysview.xml
/etc.xml
/content.feed.xml
/content.rss.xml
/content.feed.html
/content/add_valid_page.html?debug=layout
/projects
/tagging
/etc/replication.html
/etc/cloudservices.html
/welcome
在终端或命令提示符下发出以下命令以确定是否启用了匿名写入访问。 您不应能够将数据写入节点。
curl -X POST "https://anonymous:anonymous@hostname:port/content/usergenerated/mytestnode"
在终端或命令提示符下发出以下命令,尝试使调度程序缓存失效,并确保收到代码404响应:
curl -H "CQ-Handle: /content" -H "CQ-Path: /content" https://yourhostname/dispatcher/invalidate.cache
配置Dispatcher以启用对为AEM页面配置的虚URL的访问。
启用对虚URL的访问时,Dispatcher会定期调用在渲染实例上运行的服务以获取虚URL的列表。 调度程序将此列表存储在本地文件中。 当由于/filter
部分的筛选器而拒绝页面请求时,调度程序将咨询虚URL的列表。 如果拒绝的URL在列表上,则Dispatcher允许访问虚URL。
要启用对虚URL的访问,请向/farms
部分添加/vanity_urls
部分,如下例所示:
/vanity_urls {
/url "/libs/granite/dispatcher/content/vanityUrls.html"
/file "/tmp/vanity_urls"
/delay 300
}
/vanity_urls
部分包含以下属性:
/url
:在渲染实例上运行的虚URL服务的路径。此属性的值必须为"/libs/granite/dispatcher/content/vanityUrls.html"
。
/file
:本地文件的路径,调度程序存储虚URL的列表。确保Dispatcher具有对此文件的写访问权限。
/delay
:(秒)调用虚URL服务之间的时间。
如果您的渲染是AEM的实例,则必须安装软件分发](https://experience.adobe.com/#/downloads/content/software-distribution/en/aem.html?package=/content/software-distribution/en/details.html/content/dam/aem/public/adobe/packages/granite/vanityurls-components)的[VanityURLS-Components包才能启用虚URL服务。 (有关详细信息,请参阅软件分发。)
请按照以下过程启用对虚URL的访问。
/filter
配置拒绝该URL。 如有必要,请添加一个拒绝该URL的过滤器。/farms
下的/vanity_urls
部分。联合请求通常仅适用于Dispatcher,因此默认情况下,它们不会发送到呈示器(例如AEM实例)。
如有必要,请将/propagateSyndPost
属性设置为"1"
以将联合请求转发给调度程序。 如果设置了此选项,则必须确保筛选器部分不拒绝POST请求。
/cache
部分控制调度程序如何缓存文档。 配置多个子属性以实施缓存策略:
/docroot
/statfile
/serveStaleOnError
/allowAuthorized
/rules
/statfileslevel
/invalidate
/invalidateHandler
/allowedClients
/ignoreUrlParams
/headers
/mode
/gracePeriod
/enableTTL
缓存部分示例如下所示:
/cache
{
/docroot "/opt/dispatcher/cache"
/statfile "/tmp/dispatcher-website.stat"
/allowAuthorized "0"
/rules
{
# List of files that are cached
}
/invalidate
{
# List of files that are auto-invalidated
}
}
对于权限敏感型缓存,请阅读缓存安全内容。
/docroot
属性标识存储缓存文件的目录。
该值必须与Web服务器的文档根路径完全相同,这样调度程序和Web服务器就可以处理相同的文件。
Web服务器负责在使用调度程序缓存文件时提供正确的状态代码,这就是它能够找到它的重要原因。
如果您使用多个场,则每个场必须使用不同的文档根。
/statfile
属性标识要用作statfile的文件。 调度程序使用此文件注册最新内容更新的时间。 statfile可以是Web服务器上的任何文件。
statfile没有内容。 更新内容时,Dispatcher会更新时间戳。 默认的statfile名为.stat
,存储在docroot中。 调度程序阻止对statfile的访问。
如果配置了/statfileslevel
,则调度程序将忽略/statfile
属性,并使用.stat
作为名称。
当渲染服务器返回错误时,/serveStaleOnError
属性控制Dispatcher是否返回无效文档。 默认情况下,当触及静态文件并使缓存内容无效时,Dispatcher会在下次请求缓存内容时删除该内容。
如果/serveStaleOnError
设置为"1"
,则除非渲染服务器返回成功响应,否则调度程序不会从缓存中删除无效内容。 AEM的5xx响应或连接超时导致Dispatcher提供过时的内容,并响应HTTP状态111(重新验证失败)。
/allowAuthorized
属性控制是否缓存包含以下任何身份验证信息的请求:
authorization
标头authorization
的cookielogin-token
的cookie默认情况下,包含此身份验证信息的请求不会缓存,因为当缓存文档返回到客户端时,不会执行身份验证。 此配置可阻止Dispatcher向没有必要权限的用户提供缓存文档。
但是,如果要求允许缓存已验证的文档,请将/allowAuthorized
设置为:
/allowAuthorized "1"
要启用会话管理(使用/sessionmanagement
属性),/allowAuthorized
属性必须设置为"0"
。
/rules
属性控制根据文档路径缓存哪些文档。 无论/rules
属性如何,在以下情况下,调度程序都不会缓存文档:
如果请求URI包含问号(?
)。
缺失文件扩展名。
设置了身份验证标头(此项可进行配置)。
如果AEM实例使用以下标题做出响应:
no-cache
no-store
must-revalidate
GET 或 HEAD(针对 HTTP 标头)方法可由 Dispatcher 缓存。有关响应头缓存的其他信息,请参阅缓存HTTP响应头部分。
/rules
属性中的每个项目都包括glob
模式和类型:
glob
模式用于匹配文档的路径。glob
模式匹配的文档。 该值可以是允许(缓存文档)或拒绝(始终呈现文档)。如果您没有动态页面(除上述规则已排除的页面之外),您可以配置Dispatcher以缓存所有内容。 此项的规则部分如下所示:
/rules
{
/0000 { /glob "*" /type "allow" }
}
有关全局属性的信息,请参阅设计全局属性的模式。
如果页面中有一些部分是动态的(例如,新闻应用程序),或在已关闭的用户组中,您可以定义例外:
关闭的用户组不得缓存,因为未检查缓存页面的用户权限。
/rules
{
/0000 { /glob "*" /type "allow" }
/0001 { /glob "/en/news/*" /type "deny" }
/0002 { /glob "*/private/*" /type "deny" }
}
压缩
在Apache Web服务器上,您可以压缩缓存的文档。 如果客户端请求压缩,Apache将以压缩形式返回文档。 通过启用Apache模块mod_deflate
自动完成压缩,例如:
AddOutputFilterByType DEFLATE text/plain
默认情况下,该模块随Apache 2.x一起安装。
使用/statfileslevel
属性根据缓存文件的路径使其失效:
调度程序在从Docroot文件夹到您指定级别的每个文件夹中创建.stat
文件。 Docroot文件夹为0级。
通过触摸.stat
文件使文件失效。 将.stat
文件的上次修改日期与缓存文档的上次修改日期进行比较。 如果.stat
文件较新,将重新获取文档。
当位于某一级别的文件失效时,将从docroot 到的所有.stat
文件失效,将触及失效文件或配置的statsfilevel
(以较小者为准)的级别。
statfileslevel
属性设置为6,并且文件在级别5处失效,则每个从docroot到5的.stat
文件都会被触碰。 继续此示例,如果文件在级别7时失效,则每次。 stat
将触摸从docroot到6的文件(自此 /statfileslevel = "6"
)。仅影响路径中无效文件的资源。 请考虑以下示例:网站使用结构/content/myWebsite/xx/.
如果将statfileslevel
设置为3,则创建.stat
文件,如下所示:
docroot
/content
/content/myWebsite
/content/myWebsite/*xx*
当/content/myWebsite/xx
中的文件失效时,从docroot到/content/myWebsite/xx
的每个.stat
文件都会被触碰。 这将仅适用于/content/myWebsite/xx
,而不适用于/content/myWebsite/yy
或/content/anotherWebSite
。
通过发送额外的标头CQ-Action-Scope:ResourceOnly
可以防止失效。 这可用于刷新特定资源而不使高速缓存的其他部分失效。 有关更多详细信息,请参阅此页和手动使调度程序缓存失效。
如果为/statfileslevel
属性指定值,则忽略/statfile
属性。
/invalidate
属性定义在更新内容时自动失效的文档。
如果自动失效,调度程序在内容更新后不会删除缓存文件,但会在下次请求文件时检查其有效性。 缓存中未自动失效的文档将保留在缓存中,直到内容更新显式删除它们。
HTML页面通常使用自动失效。 HTML页面通常包含指向其他页面的链接,因此很难确定内容更新是否影响页面。 要确保更新内容时所有相关页面都失效,请自动使所有HTML页面失效。 以下配置使所有HTML页失效:
/invalidate
{
/0000 { /glob "*" /type "deny" }
/0001 { /glob "*.html" /type "allow" }
}
有关全局属性的信息,请参阅设计全局属性的模式。
此配置在/content/wknd/us/en
被激活时导致以下活动:
/content/wknd/us
文件夹中删除。/content/wknd/us/en./_jcr_content
文件夹已删除。/invalidate
配置匹配的所有其他文件。 下一个请求发生时,这些文件将被删除。 在我们的示例中,/content/wknd.html
未被删除,它将在请求/content/wknd.html
时被删除。如果您优惠自动生成的PDF和ZIP文件进行下载,则可能还必须自动使这些文件失效。 配置示例如下所示:
/invalidate
{
/0000 { /glob "*" /type "deny" }
/0001 { /glob "*.html" /type "allow" }
/0002 { /glob "*.zip" /type "allow" }
/0003 { /glob "*.pdf" /type "allow" }
}
AEM与Adobe Analytics的集成在您网站的analytics.sitecatalyst.js
文件中提供配置数据。 随调度程序提供的示例dispatcher.any
文件包括此文件的以下失效规则:
{
/glob "*/analytics.sitecatalyst.js" /type "allow"
}
/invalidateHandler
属性允许您定义一个脚本,该脚本被调用,用于调度程序收到的每个失效请求。
它使用以下参数调用:
CQ-Action-Scope: ResourceOnly
的标头,否则请参阅从AEM取消缓存页面的验证以了解详细信息)这可用于涵盖许多不同的用例,如使其他应用程序特定的缓存失效,或处理页面的外部化URL及其在Docroot中的位置与内容路径不匹配的情况。
以下示例脚本记录每个对文件的无效请求。
/invalidateHandler "/opt/dispatcher/scripts/invalidate.sh"
#!/bin/bash
printf "%-15s: %s %s" $1 $2 $3>> /opt/dispatcher/logs/invalidate.log
/allowedClients
属性定义允许刷新缓存的特定客户端。 所述覆盖图案与所述IP匹配。
以下示例:
/allowedClients
{
/0001 { /glob "*.*.*.*" /type "deny" }
/0002 { /glob "127.0.0.1" /type "allow" }
}
有关全局属性的信息,请参阅设计全局属性的模式。
建议您定义/allowedClients
。
如果不执行此操作,任何客户端都可发出清除缓存的调用;如果重复执行此操作,可能会严重影响站点性能。
ignoreUrlParams
部分定义在确定页面是缓存还是从缓存中传送时将忽略哪些URL参数:
当忽略某个页面的参数时,将在首次请求该页面时缓存该页面。 对页面的后续请求将提供到缓存的页面,而不管请求中的参数值如何。
要指定忽略哪些参数,请向ignoreUrlParams
属性添加全局规则:
以下示例导致Dispatcher忽略q
参数,以便缓存包含q参数的请求URL:
/ignoreUrlParams
{
/0001 { /glob "*" /type "deny" }
/0002 { /glob "q" /type "allow" }
}
使用示例ignoreUrlParams
值,以下HTTP请求会导致页面被缓存,因为忽略q
参数:
GET /mypage.html?q=5
使用示例ignoreUrlParams
值,以下HTTP请求会使页面不被缓存,因为p
参数未被忽略:
GET /mypage.html?q=5&p=4
有关全局属性的信息,请参阅设计全局属性的模式。
此功能适用于Dispatcher的版本4.1.11。
/headers
属性允许您定义将由调度程序缓存的HTTP头类型。 在对未缓存资源的第一个请求中,与配置值之一匹配的所有标头(请参见下面的配置示例)都存储在缓存文件旁的单独文件中。 在对缓存资源的后续请求中,存储的标头被添加到响应中。
以下是默认配置的示例:
/cache {
...
/headers {
"Cache-Control"
"Content-Disposition"
"Content-Type"
"Expires"
"Last-Modified"
"X-Content-Type-Options"
"Last-Modified"
}
}
另请注意,不允许使用文件格式化字符。 有关详细信息,请参阅设计全局属性的模式。
如果需要Dispatcher从AEM存储和传送ETag响应头,请执行以下操作:
/cache/headers
部分添加标题名称。FileETag none
mode
属性指定将哪些文件权限应用于缓存中的新目录和文件。 此设置受调用进程的umask
限制。 它是从以下一个或多个值之和构建的八进制数:
0400
允许所有者阅读。0200
允许由所有者写入。0100
允许所有者在目录中搜索。0040
允许由用户组成员读取。0020
允许由组成员写入。0010
允许用户组成员在目录中搜索。0004
允许他人阅读。0002
允许他人写入。0001
允许其他人在目录中搜索。默认值为0755
,它允许所有者读取、写入或搜索,组和其他人读取或搜索。
使用默认的/invalidate
属性,每个激活都会有效地使所有.html
文件失效(当其路径与/invalidate
部分匹配时)。 在具有大量流量的网站上,多个后续激活将增加后端的cpu负载。 在这种情况下,最好“限制”.stat
文件触碰,以使网站保持响应。 可以使用/gracePeriod
属性执行此操作。
/gracePeriod
属性定义在上次出现激活后,过时的自动失效资源仍可从缓存中服务的秒数。 该属性可用在设置中,在该设置中,批激活会反复使整个缓存失效。 建议的值为2秒。
有关其他详细信息,请阅读上面的/invalidate
和/statfileslevel
部分。
如果设置,/enableTTL
属性将评估来自后端的响应头,如果响应头包含Cache-Control
max-age或Expires
日期,则会创建缓存文件旁的辅助空文件,修改时间等于到期日。 当请求缓存的文件超过修改时间时,会自动从后端重新请求该文件。
此功能在Dispatcher的4.1.11或更高版本中可用。
/statistics
部分定义了类别文件,Dispatcher为这些文件对每个渲染的响应性进行评分。 调度程序使用分数来确定发送请求的渲染。
您创建的每个类别定义全局模式。 调度程序将所请求内容的URI与这些模式进行比较,以确定所请求内容的类别:
调度程序最多支持8个统计类别。 如果定义的类别超过8个,则只使用前8个。
渲染选择
每次Dispatcher需要渲染页面时,它都使用以下算法来选择渲染:
如果请求在renderid
cookie中包含呈现名称,则调度程序将使用该呈现。
如果请求不包含renderid
cookie,则调度程序将比较呈现统计信息:
如果尚未选择任何渲染,请在列表中使用第一个渲染。
渲染器类别的得分基于以前的响应时间以及调度程序尝试的以前失败和成功连接。 对于每次尝试,将更新所请求URI类别的得分。
如果不使用负载平衡,可忽略此部分。
为每种类型的类别定义一个文档,您要为其保留用于渲染选择的统计信息。 /statistics
部分包含/categories
部分。 要定义类别,请在/categories
部分下添加一行,其格式如下:
/name { /glob "pattern"}
类别name
必须对农场是唯一的。 pattern
在全局属性设计模式一节中有介绍。
要确定URI的类别,调度程序会将URI与每个类别模式进行比较,直到找到匹配项。 调度程序从列表中的第一个类别开始,并按顺序继续。 因此,首先放置具有更具体模式的类别。
例如,默认dispatcher.any
文件的调度程序定义HTML类别和其他类别。 HTML类别更加具体,因此它首先显示:
/statistics
{
/categories
{
/html { /glob "*.html" }
/others { /glob "*" }
}
}
以下示例还包括搜索页面的类别:
/statistics
{
/categories
{
/search { /glob "*search.html" }
/html { /glob "*.html" }
/others { /glob "*" }
}
}
/unavailablePenalty
属性设置当与渲染器的连接失败时应用于渲染统计信息的时间(以十分之一秒为单位)。 调度程序将时间添加到与请求的URI匹配的统计类别。
例如,当无法建立到指定主机名/端口的TCP/IP连接时,会应用惩罚,因为AEM未运行(且未侦听),或者由于网络相关问题。
/unavailablePenalty
属性是/farm
部分(/statistics
部分的同级)的直接子项。
如果不存在/unavailablePenalty
属性,则使用"1"
值。
/unavailablePenalty "1"
/stickyConnectionsFor
属性定义一个包含粘滞文档的文件夹;这将通过URL进行访问。 调度程序将所有位于此文件夹中的请求从单个用户发送到同一渲染实例。 粘滞连接可确保会话数据对所有文档都存在且一致。 此机制使用renderid
cookie。
以下示例定义到/products文件夹的粘滞连接:
/stickyConnectionsFor "/products"
当页面由来自多个内容节点的内容组成时,请包含/paths
属性,该属性列表到内容的路径。 例如,页面包含/content/image
、/content/video
和/var/files/pdfs
中的内容。 以下配置为页面上的所有内容启用粘贴连接:
/stickyConnections {
/paths {
"/content/image"
"/content/video"
"/var/files/pdfs"
}
}
启用粘性连接后,调度程序模块将设置renderid
cookie。 此cookie没有httponly
标志,应添加该<a0/>标志以增强安全性。 可以通过在dispatcher.any
配置文件的/stickyConnections
节点中设置httpOnly
属性来完成此操作。 属性的值(0
或1
)定义renderid
cookie是否附加了HttpOnly
属性。 默认值为0
,表示不添加属性。
有关httponly
标志的其他信息,请阅读此页。
启用粘性连接后,调度程序模块将设置renderid
cookie。 此cookie没有secure
标志,应添加该<a0/>标志以增强安全性。 可以通过在dispatcher.any
配置文件的/stickyConnections
节点中设置secure
属性来完成此操作。 属性的值(0
或1
)定义renderid
cookie是否附加了secure
属性。 默认值为0
,这意味着如果传入请求是安全的,则将添加属性。如果该值设置为1
,则无论传入请求是否安全,都将添加安全标志。
当渲染服务器返回500错误或不可用时配置调度程序行为。
使用/health_check
属性指定在发生500状态代码时检查的URL。 如果此页还返回500状态代码,则该实例被视为不可用,在重试之前,对渲染应用可配置的时间惩罚(/unavailablePenalty
)。
/health_check
{
# Page gets contacted when an instance returns a 500
/url "/health_check.html"
}
/retryDelay
属性设置调度程序在场呈现的连接尝试轮次之间等待的时间(以秒为单位)。 对于每轮,调度程序尝试连接到渲染器的最大次数是场中的渲染次数。
如果未显式定义/retryDelay
,调度程序将使用值"1"
。 默认值在大多数情况下都适用。
/retryDelay "1"
/numberOfRetries
属性设置调度程序在渲染时执行的最大连接尝试轮数。 如果Dispatcher在此数量的重试后无法成功连接到渲染器,则Dispatcher返回失败的响应。
对于每轮,调度程序尝试连接到渲染器的最大次数是场中的渲染次数。 因此,调度程序尝试连接的最大次数为(/numberOfRetries
)x(渲染次数)。
如果未显式定义该值,则默认值为5
。
/numberOfRetries "5"
在原始请求失败时,启用调度程序群上的故障转移机制以向不同的渲染器重新发送请求。 启用故障转移后,调度程序具有以下行为:
health_check
属性配置的页面的请求。
要启用故障转移,请将以下行添加到场(或网站):
/failover "1"
要重试包含正文的HTTP请求,Dispatcher会在假脱机实际内容之前向渲染器发送一个Expect: 100-continue
请求标头。 带CQSE的CQ 5.5随后立即回答为100(继续)或错误代码。 其他servlet容器也应支持此。
通常不需要此选项。 您只需在看到以下日志消息时使用它:
Error while reading response: Interrupted system call
如果系统调用的对象位于通过NFS访问的远程系统上,则任何面向文件系统的系统调用都可中断EINTR
。 这些系统调用是否可以超时或中断取决于基础文件系统在本地计算机上的安装方式。
如果您的实例具有此类配置,并且日志包含以下消息,请使用/ignoreEINTR
参数:
Error while reading response: Interrupted system call
在内部,调度程序使用循环从远程服务器(即AEM)读取响应,该循环可以表示为:
while (response not finished) {
read more data
}
当EINTR
出现在“read more data
”部分时,可以生成这样的消息,这些消息是由在接收到任何数据之前接收信号引起的。
要忽略此类中断,可以将以下参数添加到dispatcher.any
(/farms
之前):
/ignoreEINTR "1"
将/ignoreEINTR
设置为"1"
会导致调度程序继续尝试读取数据,直到读取完整响应。 默认值为0
并取消激活该选项。
调度程序配置文件中的几个部分使用glob
属性作为客户端请求的选择标准。 glob
属性的值是调度程序与请求的一个方面进行比较的模式,如所请求资源的路径或客户端的IP地址。 例如,/filter
部分中的项使用glob
模式来标识调度程序对其执行操作或拒绝的页面的路径。
glob
值可以包含通配符和字母数字字符来定义模式。
通配符 | 描述 | 示例 |
---|---|---|
* |
匹配字符串中任意字符的零个或多个连续实例。 匹配的最终字符由以下任一情况确定:字符串中的 字符与模式中的下一个字符匹配,并且模式字符具有以下特征:
|
*/geo* 匹配节点和节 /content/geometrixx 点下的任 /content/geometrixx-outdoors 何页。以下HTTP请求与全局模式匹配:
*outdoors/* 匹配节点下的任 /content/geometrixx-outdoors 何页面。例如,以下HTTP请求与全局模式匹配:
|
? |
匹配任何单个字符。 使用外部字符类。 在字符类中,该字符将字面解释。 | *outdoors/??/* 匹配geometrixx-outdoors站点中任何语言的页面。例如,以下HTTP请求与全局模式匹配:
以下请求与全局模式不匹配:
|
[ and ] |
取消字符类的开头和结尾的标记。 字符类可以包括一个或多个字符范围和单个字符。 如果目标字符与字符类中的任意字符或在定义的范围内匹配,则会发生匹配。 如果未包括右括号,则图案不产生匹配项。 |
*[o]men.html* 匹配以下HTTP请求:
与以下HTTP请求不匹配:
*[o/]men.html* 匹配以下HTTP请求:
|
- |
表示字符范围。 用于字符类。 在字符类之外,将字面解释此字符。 | *[m-p]men.html* 匹配以下HTTP请求:
|
! |
否定后面的字符或字符类。 仅用于否定字符类中的字符和字符范围。 等效于^ wildcard 。 在字符类之外,将字面解释此字符。 |
*[ !o]men.html* 匹配以下HTTP请求:
与以下HTTP请求不匹配:
*[ !o!/]men.html* 与以下HTTP请求不匹配:
|
^ |
否定后面的字符或字符范围。 仅用于否定字符类中的字符和字符范围。 等效于! 通配符。 在字符类之外,将字面解释此字符。 |
! 通配符的示例应用,将示例模式中的! 字符替换为^ 字符。 |
在Web服务器配置中,可以设置:
有关详细信息,请参阅Web服务器文档和Dispatcher实例的自述文件。
Apache旋转/管道日志
如果使用Apache Web服务器,则可以对旋转和/或管道日志使用标准功能。 例如,使用管道日志:
DispatcherLog "| /usr/apache/bin/rotatelogs logs/dispatcher.log%Y%m%d 604800"
这将自动旋转:
logs/dispatcher.log%Y%m%d
)中包含时间戳。请参见Log Rotation和Pinual Logs上的Apache Web服务器文档;例如Apache 2.4。
安装后,默认日志级别较高(即级别3 =调试),因此调度程序会记录所有错误和警告。 这在最初阶段非常有用。
但是,这需要额外的资源,因此当Dispatcher根据您的要求顺利地工作时,您可以(应该)降低日志级别。
在对Dispatcher的其他增强功能中,版本4.2.0还引入了跟踪日志记录。
这比调试日志记录更高,日志中显示其他信息。 它添加了以下记录:
通过在Web服务器中将日志级别设置为4
,可以启用跟踪日志记录。
以下是启用跟踪的日志示例:
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[Host] = "localhost:8443"
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[User-Agent] = "curl/7.43.0"
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[Accept] = "*/*"
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[X-Forwarded-SSL-Client-Cert] = "(null)"
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[Via] = "1.1 localhost:8443 (dispatcher)"
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[X-Forwarded-For] = "::1"
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[X-Forwarded-SSL] = "on"
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[X-Forwarded-SSL-Cipher] = "DHE-RSA-AES256-SHA"
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[X-Forwarded-SSL-Session-ID] = "ba931f5e4925c2dde572d766fdd436375e15a0fd24577b91f4a4d51232a934ae"
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[X-Forwarded-Port] = "8443"
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[Server-Agent] = "Communique-Dispatcher"
当请求与阻止规则匹配的文件时记录事件:
[Thu Mar 03 14:42:45 2016] [T] [11831] 'GET /content.infinity.json HTTP/1.1' was blocked because of /0082
要确认Web服务器、调度程序和AEM实例的基本操作和交互,可以执行以下步骤:
将loglevel
设置为3
。
开始Web服务器;这也会开始调度程序。
开始AEM实例。
检查Web服务器和调度程序的日志和错误文件。
[Thu May 30 05:16:36 2002] [notice] Apache/2.0.50 (Unix) configured
和[Fri Jan 19 17:22:16 2001] [I] [19096] Dispatcher initialized (build XXXX)
通过Web服务器浏览网站。 确认内容是按需要显示的。
例如,在AEM在端口4502
上运行,而在80
上的Web服务器上,使用以下两种方式访问网站控制台:
https://localhost:4502/libs/wcm/core/content/siteadmin.html
https://localhost:80/libs/wcm/core/content/siteadmin.html
检查是否已填写缓存目录。
激活页面以检查缓存是否正在正确刷新。
如果一切正常运行,您可以将loglevel
缩小为0
。
在复杂设置中,您可以使用多个 Dispatcher。例如,您可以使用:
在这种情况下,请确保每个请求只通过一个 Dispatcher。一个 Dispatcher 不能处理来自另一个 Dispatcher 的请求。因此,请确保两个 Dispatcher 都能直接访问 AEM 网站。
在将标头X-Dispatcher-Info
添加到请求时,调度程序会回答是缓存目标、从缓存返回数据还是根本无法缓存。 响应标头X-Cache-Info
以可读形式包含此信息。 您可以使用这些响应标头来调试与由调度程序缓存的响应有关的问题。
默认情况下,此功能未启用,因此要包含响应头X-Cache-Info
,场必须包含以下条目:
/info "1"
例如,
/farm
{
/mywebsite
{
# Include X-Cache-Info response header if X-Dispatcher-Info is in request header
/info "1"
}
}
此外,X-Dispatcher-Info
头不需要值,但如果使用curl
进行测试,则必须提供值才能发送头,例如:
curl -v -H "X-Dispatcher-Info: true" https://localhost/content/wknd/us/en.html
下面是包含X-Dispatcher-Info
将返回的响应标头的列表:
cache.docroot
)。_YYYYXXXXXX
,将替换Y
和X
以创建唯一名称。/test.html/a/path
。sessionmanagement
节点)管理,而请求不包含相应的身份验证信息。allowAuthorized 0
),并且请求包含身份验证信息。/test.html/a/file.ext
的请求是第一个并且包含可缓存输出,调度程序将无法将后续请求的输出缓存到/test.html
。sessionmanagement
点)控制,用户的会话无效或不再有效。no_cache
Dispatcher: no_cache
header,禁止调度程序缓存输出。