CDN-konfigurationsfragment för vanliga scenarier cdn-configuration-snippets
Den här artikeln samlar in praktiska cdn.yaml-mönster för AEM as a Cloud Service. Använd dem tillsammans med funktionsdokumentationen för CDN-trafikregler, kundhanterade CDN-autentiseringsuppgifter och trafikfilterregler, inklusive WAF. Distribuera fragment med en Cloud Manager config-pipeline.
Kundhanterad CDN customer-managed-cdn
Konfigurera Edge Key Authentication för vissa domäner edge-auth-selected-hosts
Problem: På en kundhanterad CDN måste du framtvinga autentisering för vissa kundvärdnamn medan andra värdnamn som kan publiceras ska vara tillgängliga utan det huvudet (till exempel under utrullning eller när endast en varumärkesdomän finns bakom ditt CDN).
Lösning: Kräv endast X-AEM-Edge-Key-autentisering när det första värdnamnet från X-Forwarded-Host är lika med ditt målvärdnamn (till exempel example.com). Regeln använder egenskapen forwardedDomain request för att utföra matchningen och kör åtgärden authenticate mot kantautentiseraren. Ersätt värdnamn, autentiserarnamn och nyckelplatshållare för programmet.
kind: "CDN"
version: "1"
data:
authentication:
authenticators:
- name: edge-key-auth
type: edge
edgeKey1: ${{CDN_EDGEKEY_1}}
edgeKey2: ${{CDN_EDGEKEY_2}}
rules:
- name: edge-key-auth-rule
when: { reqProperty: forwardedDomain, equals: "example.com" }
action:
type: authenticate
authenticator: edge-key-auth
Konfigurera Edge Key Authentication för begäranden som inte kommer från VPN IP-adresser edge-auth-trusted-ips
Problem: Konfigurera autentisering av edge key för BYOCDN men tillåt direktåtkomst till publiceringsdomän endast för VPN IP-adresser
Lösning: Kräv endast X-AEM-Edge-nyckelautentisering när klient-IP inte finns med i listan över VPN-IP
kind: "CDN"
version: "1"
data:
authentication:
authenticators:
- name: edge-key-auth
type: edge
edgeKey1: ${{CDN_EDGEKEY_1}}
edgeKey2: ${{CDN_EDGEKEY_2}}
rules:
- name: edge-key-auth-rule
when: { reqProperty: clientIp, notIn: ["10.0.0.1", "11.0.0.0/24", "<other VPN IPs>"] }
action:
type: authenticate
authenticator: edge-key-auth
Omdirigeringar redirects
Omdirigering från APEX-domän till www apex-to-www
kind: "CDN"
version: "1"
data:
redirects:
rules:
- name: non-www-to-www-redirect
when:
reqProperty: domain
doesNotMatch: '^www\.'
action:
type: redirect
status: 301
location:
join:
format: 'https://www.%s%s'
args:
- reqProperty: domain
- reqProperty: url
Ändra cachenyckeln cache-key
CDN visar inte ett separat"cache-nyckelfält". Eftersom URL:en deltar i cachelagring kan du dela cacheposter genom att ändra URL:en, till exempel genom att lägga till en frågeparameter via en begäranomvandling.
kind: "CDN"
version: "1"
data:
requestTransformations:
rules:
- name: set-request-different-cache-curl
when:
allOf:
- reqProperty: tier
equals: publish
- reqHeader: user-agent
matches: curl
actions:
- type: set
queryParam: cache
value: 'curl'
Omdirigering till en normaliserad bana trailing-slash
Skicka en permanent omdirigering när en webbläsare begär ett avslutande snedstreck vid publicering, till exempel från https://www.example.com/path/ till https://www.example.com/path.
kind: "CDN"
version: "1"
data:
redirects:
rules:
- name: remove-trailing-slash
when:
allOf:
- reqProperty: tier
equals: publish
- reqProperty: domain
equals: www.example.com
- reqProperty: originalPath
matches: ^/(.+)/$
action:
type: redirect
status: 301
location:
reqProperty: originalPath
transform:
- op: replace
match: ^/(.+)/$
replacement: https://www.example.com/\1
Extrahera information från en JSON-cookie json-cookie
kind: "CDN"
version: "1"
data:
requestTransformations:
rules:
- name: options-response
when: { reqProperty: tier, equals: publish }
actions:
- type: set
reqHeader: x-mycookie-info
value:
reqCookie: mycookie
transform:
- 'base64decode'
- { op: 'replace', match: '"info":\s*"([^"]*)"', replacement: '\1'}
Korsorikinställningar cross-origin
Hantera OPTIONS-förfrågningar från CDN options-from-cdn
kind: "CDN"
version: "1"
data:
requestTransformations:
rules:
- name: options-response
when:
allOf:
- { reqProperty: path, like: /mypathi* }
- { reqProperty: method, equals: "OPTIONS" }
- { reqHeader: Origin, equals: "https://example.com" }
actions:
- type: respond
status: 200
reason: "OK"
headers:
content-type: 'text/plain'
access-control-allow-origin: { reqHeader: Origin }
access-control-allow-methods: "*"
access-control-allow-headers: "*"
Trafikfilter traffic-filters
Hastighetsbegränsning ASN rate-limit-asn
Problem: Frekvensgränserna per IP kan missa ett distribuerat denial of service-mönster (DDoS): varje adress ligger under tröskelvärdet, så att både legitim och otillbörlig trafik ser likadan ut på IP-lagret.
Lösning: Räkna begäranden med det autonoma systemnamnet (clientAsName) så att avgränsaren aggregerar värdar som delar samma nätverksnamn. Fragmentet skriver clientAsName till en loggegenskap på varje begäran och tillämpar sedan en hastighetsbegränsning för författaren och publiceringen som grupperas efter det värdet. Många användare kan dela ett ASN (till exempel en stor Internet-leverantör eller en VPN-avslutning på ett företag), så trimma noggrant begränsningarna och övervaka CDN-loggarna för att se om det finns några falska positiva resultat.
kind: "CDN"
version: "1"
data:
requestTransformations:
rules:
- name: log-on-request
when: "*"
actions:
- type: set
logProperty: client_as_name
value:
reqProperty: clientAsName
trafficFilters:
rules:
- name: limit-requests-client-as-name
when:
reqProperty: tier
matches: "author|publish"
rateLimit:
limit: 60
window: 10
penalty: 300
count: all
groupBy:
- reqProperty: clientAsName
action: block