CDN-configuratiefragmenten voor algemene scenario's cdn-configuration-snippets
In dit artikel worden praktische cdn.yaml patronen voor AEM as a Cloud Service verzameld. Gebruik hen samen met de eigenschapdocumentatie voor CDN verkeersregels , klant-geleide geloofsbrieven CDN , en regels van de verkeersfilter met inbegrip van WAF . Stel fragmenten met een Cloud Manager config pijpleiding op.
Door de klant beheerde CDN customer-managed-cdn
Edge Key-verificatie instellen voor alleen bepaalde domeinen edge-auth-selected-hosts
Probleem: Op a klant-geleide CDN , moet u authentificatie voor sommige klant hostnames afdwingen terwijl andere hostnames die bereiken publiceren beschikbaar zonder die kopbal (bijvoorbeeld tijdens rollout of wanneer slechts één merkdomein achter uw CDN) zou moeten blijven.
Oplossing: Vereis X-AEM-Edge-Key authentificatie slechts wanneer eerste hostname van X-Forwarded-Host uw doel hostname (bijvoorbeeld example.com) evenaart. De regel gebruikt de forwardedDomain request-eigenschap om die overeenkomst uit te voeren en voert de authenticate -actie uit tegen de Edge-authenticator. Vervang hostnamen, verificatienamen en belangrijke plaatsaanduidingen voor uw programma.
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
De Zeer belangrijke Authentificatie van Edge van de vestiging voor Verzoeken die niet uit IPs van VPN komen edge-auth-trusted-ips
Probleem: De de randzeer belangrijke authentificatie van de opstelling voor BYOCDN maar staat directe toegang toe om domein slechts voor VPN IPs te publiceren
Oplossing: Vereis X-AEM-Edge-Zeer belangrijke authentificatie slechts wanneer cliënt IP niet in de lijst van VPN IPs is
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
Omleiding redirects
Omleiding van APEX-domein naar 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
Cache-toets wijzigen cache-key
De CDN stelt geen afzonderlijk "geheim voorgeheugensleutel"gebied bloot. Omdat URL aan caching deelneemt, kunt u geheim voorgeheugeningangen splitsen door URL-voor voorbeeld te veranderen door een vraagparameter door a verzoektransformatie toe te voegen.
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'
Omleiden naar een genormaliseerd pad trailing-slash
Verzend een permanente omleiding wanneer een browser bij het publiceren om een slash met het teken vraagt, bijvoorbeeld van https://www.example.com/path/ naar 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
Informatie uit een JSON-cookie extraheren 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'}
Oorsprong instellen cross-origin
OPTIONS-verzoeken vanuit de CDN verzenden 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: "*"
Verkeersfilters traffic-filters
Snelheidsbeperking ASN rate-limit-asn
Probleem: De tariefgrenzen van per-IP kunnen een verdeeld ontkenning-van-dienst (DDoS) patroon missen: elk adres blijft onder de drempel, zo wettig en misbruik verkeer kijken als bij de IP laag.
Oplossing: De verzoeken van de telling door autonome systeemnaam (clientAsName) zodat aggregeert de limiter gastheren die de zelfde netwerknaam delen. Het fragment schrijft clientAsName naar een logeigenschap op elke aanvraag en past vervolgens een snelheidslimiet toe op auteur en publiceert gegroepeerd op die waarde. Vele gebruikers kunnen één ASN (bijvoorbeeld grote ISP of een collectieve uitgang van VPN) delen, zo stemmen zorgvuldig grenzen en controleren CDN- logboeken voor valse positieven.
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