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.

NOTE
Ersätt värdnamn, sökvägar, IP-intervall, nycklar och tröskelvärden med värden som matchar ditt program. Testa ändringar i en icke-produktionsmiljö innan du marknadsför dem.

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
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
recommendation-more-help
fbcff2a9-b6fe-4574-b04a-21e75df764ab