設定 CDN 上的流量 cdn-configuring-cloud
AEM as a Cloud Service提供可在Adobe管理的CDN層設定的功能集合,可修改傳入要求或傳出回應的性質。 下列規則(在本頁中詳細說明)可宣告為達成下列行為:
在CDN也可以設定的是流量篩選規則(包括WAF),其可控制CDN允許或拒絕的流量。 此功能已發行,您可以在流量篩選器規則(包括WAF規則)頁面中瞭解更多相關資訊。
此外,如果CDN無法連絡其來源,您可以撰寫規則來參考自行託管的自訂錯誤頁面(然後呈現)。 閱讀設定CDN錯誤頁面文章以進一步瞭解此專案。
所有這些在原始檔控制的設定檔案中宣告的規則,都是使用Cloud Manager 設定管道來部署。請注意,組態檔(包括流量篩選規則)的累積大小不能超過100KB。
評估順序 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),以及位置標頭集。
允許使用固定值的絕對和相對位置。
請注意,設定檔案的累積大小(包括流量篩選規則)不得超過100KB。
設定範例:
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'