在 CDN 上配置流量 cdn-configuring-cloud
AEM as a Cloud Service提供可在Adobe管理的CDN层配置的功能集合,这些功能可修改传入请求或传出响应的性质。 可以声明以下规则(在本页中有详细描述)以实现以下行为:
在CDN上还可配置的还有流量过滤器规则(包括WAF),这些规则控制CDN允许或拒绝的流量。 此功能已发布,您可以在流量筛选器规则(包括WAF规则)页面中了解更多相关信息。
此外,如果CDN无法联系其源,则可以编写引用自托管自定义错误页面(随后将渲染)的规则。 请阅读配置CDN错误页面文章,以了解有关此内容的更多信息。
所有这些在源代码管理的配置文件中声明的规则,均使用Cloud Manager config管道进行部署。请注意,配置文件(包括流量过滤器规则)的累积大小不能超过100 KB。
评估顺序 order-of-evaluation
在功能上,前面提到的各种功能将按照以下顺序进行评估:
设置 initial-setup
在CDN上配置流量之前,您需要执行以下操作:
规则语法 configuration-syntax
以下部分中的规则类型具有相同的语法。
规则由名称、条件“when子句”和操作引用。
when子句根据属性(包括域、路径、查询字符串、标头和Cookie)确定是否评估规则。 各种规则类型的语法相同;有关详细信息,请参阅“流量过滤规则”文章中的条件结构部分。
“操作”节点的详细信息因规则类型而异,并在以下各个部分中进行了概述。
请求转换 request-transformations
请求转换规则允许您修改传入请求。 这些规则支持根据各种匹配条件(包括正则表达式)设置、取消设置和更改路径、查询参数和标头(包括Cookie)。 您还可以设置变量,之后可在评估序列中引用这些变量。
用例多种多样,包括URL重写以简化应用程序或映射旧版URL。
如前所述,配置文件存在大小限制,因此具有更高要求的组织应在apache/dispatcher
层定义规则。
配置示例:
kind: "CDN"
version: "1"
metadata:
envTypes: ["dev", "stage", "prod"]
data:
requestTransformations:
removeMarketingParams: true
rules:
- name: set-header-rule
when:
reqProperty: path
like: /set-header
actions:
- type: set
reqHeader: x-some-header
value: some value
- name: set-header-with-reqproperty-rule
when:
reqProperty: path
like: /set-header
actions:
- type: set
reqHeader: x-some-header
value: {reqProperty: path}
- name: unset-header-rule
when:
reqProperty: path
like: /unset-header
actions:
- type: unset
reqHeader: x-some-header
- name: unset-matching-query-params-rule
when:
reqProperty: path
equals: /unset-matching-query-params
actions:
- type: unset
queryParamMatch: ^removeMe_.*$
- name: unset-all-query-params-except-exact-two-rule
when:
reqProperty: path
equals: /unset-all-query-params-except-exact-two
actions:
- type: unset
queryParamMatch: ^(?!leaveMe$|leaveMeToo$).*$
- name: multi-action
when:
reqProperty: path
like: /multi-action
actions:
- type: set
reqHeader: x-header1
value: body set by transformation rule
- type: set
reqHeader: x-header2
value: '201'
- name: replace-html
when:
reqProperty: path
like: /mypath
actions:
- type: transform
reqProperty: path
op: replace
match: \.html$
replacement: ""
操作
下表说明了可用的操作。
替换操作支持捕获组,如下图所示:
- name: extract-country-code-from-path
when:
reqProperty: path
matches: ^/([a-zA-Z]{2})(/.*|$)
actions:
- type: set
var: country-code
value:
reqProperty: path
- type: transform
var: country-code
op: replace
match: ^/([a-zA-Z]{2})(/.*|$)
replacement: \1
- name: replace-jpg-with-jpeg
when:
reqProperty: path
like: /mypath
actions:
- type: transform
reqProperty: path
op: replace
match: (.*)(\.jpg)$
replacement: "\1\.jpeg"
操作可以链接在一起。 例如:
actions:
- type: transform
reqProperty: path
op: replace
match: \.html$
replacement: ""
- type: transform
reqProperty: path
op: tolower
变量 variables
您可以在请求转换期间设置变量,然后稍后在评估序列中引用它们。 有关更多详细信息,请参阅评估顺序图表。
配置示例:
kind: "CDN"
version: "1"
metadata:
envTypes: ["prod", "dev"]
data:
requestTransformations:
rules:
- name: set-variable-rule
when:
reqProperty: path
equals: /set-variable
actions:
- type: set
var: some_var_name
value: some_value
responseTransformations:
rules:
- name: set-response-header-while-variable
when:
var: some_var_name
equals: some_value
actions:
- type: set
respHeader: x-some-header
value: some header value
响应转换 response-transformations
响应转换规则允许您设置和取消设置CDN传出响应的标头。 另请参阅上述示例,以引用之前在请求转换规则中设置的变量。
配置示例:
kind: "CDN"
version: "1"
metadata:
envTypes: ["prod", "dev"]
data:
responseTransformations:
rules:
- name: set-response-header-rule
when:
reqProperty: path
like: /set-response-header
actions:
- type: set
value: value-set-by-resp-rule
respHeader: x-resp-header
- name: unset-response-header-rule
when:
reqProperty: path
like: /unset-response-header
actions:
- type: unset
respHeader: x-header1
# Example: Multi-action on response header
- name: multi-action-response-header-rule
when:
reqProperty: path
like: /multi-action-response-header
actions:
- type: set
respHeader: x-resp-header-1
value: value-set-by-resp-rule-1
- type: set
respHeader: x-resp-header-2
value: value-set-by-resp-rule-2
操作
下表说明了可用的操作。
源选择器 origin-selectors
您可以利用AEM CDN将流量路由到不同的后端,包括非Adobe应用程序(可能基于每路径或子域)。
配置示例:
kind: "CDN"
version: "1"
metadata:
envTypes: ["dev"]
data:
originSelectors:
rules:
- name: example-com
when: { reqProperty: path, like: /proxy* }
action:
type: selectOrigin
originName: example-com
# skipCache: true
origins:
- name: example-com
domain: www.example.com
# ip: '1.1.1.1'
# forwardHost: true
# forwardCookie: true
# forwardAuthorization: true
# timeout: 20
操作
下表说明了可用的操作。
源
与原端的连接仅使用SSL并使用端口443。
代理到Edge Delivery Services proxying-to-edge-delivery
在某些情况下,可以使用源选择器将流量通过AEM Publish路由到AEMEdge Delivery Services:
- 某些内容由AEM Publish管理的域交付,而来自同一域的其他内容由Edge Delivery Services交付
- Edge Delivery Services交付的内容将受益于通过配置管道部署的规则,包括流量过滤器规则或请求/响应转换
以下是可以实现此目标的原点选择器规则的示例:
kind: CDN
version: '1'
data:
originSelectors:
rules:
- name: select-edge-delivery-services-origin
when:
allOf:
- reqProperty: tier
equals: publish
- reqProperty: domain
equals: <Production Host>
- reqProperty: path
matches: "^(/scripts/.*|/styles/.*|/fonts/.*|/blocks/.*|/icons/.*|.*/media_.*|/favicon.ico)"
action:
type: selectOrigin
originName: aem-live
origins:
- name: aem-live
domain: main--repo--owner.aem.live
客户端重定向 client-side-redirectors
对于301、302和类似的客户端重定向,您可以使用客户端重定向规则。 如果规则匹配,CDN会使用包含状态代码和消息(例如,HTTP/1.1 301 Moved Permanently)以及位置标头集的状态行进行响应。
允许使用具有固定值的绝对位置和相对位置。
请注意,配置文件(包括流量过滤器规则)的累积大小不能超过100 KB。
配置示例:
kind: "CDN"
version: "1"
metadata:
envTypes: ["dev"]
data:
redirects:
rules:
- name: redirect-absolute
when: { reqProperty: path, equals: "/page.html" }
action:
type: redirect
status: 301
location: https://example.com/page
- name: redirect-relative
when: { reqProperty: path, equals: "/anotherpage.html" }
action:
type: redirect
location: /anotherpage
重定向的位置可以是字符串文字(例如https://www.example.com/page),也可以是可选地使用以下语法进行转换的属性(例如path)的结果:
experimental_redirects:
rules:
- name: country-code-redirect
when: { reqProperty: path, like: "/" }
action:
type: redirect
location:
reqProperty: clientCountry
transform:
- op: replace
match: '^(.*)$'
replacement: 'https://www.example.com/\1/home'
- op: tolower
- name: www-redirect
when: { reqProperty: domain, equals: "example.com" }
action:
type: redirect
location:
reqProperty: path
transform:
- op: replace
match: '^/(.*)$'
replacement: 'https://www.example.com/\1'