Media CDN bietet erweiterte HTTP-Routingfunktionen, mit denen Sie Traffic genau bestimmten Edge-Konfigurationen und Ursprüngen zuordnen können.
Routingregel konfigurieren
Konfigurieren Sie eine Routenregel für einen Media CDN-Dienst.
Console
Rufen Sie in der Google Cloud Console die Seite Media CDN auf.
Klicken Sie auf den Namen des Dienstes, um die Seite Details des Dienstes zu öffnen, für den Sie eine Routenregel konfigurieren möchten.
Klicken Sie auf die Schaltfläche Bearbeiten, um in den Bearbeitungsmodus zu wechseln.
Klicken Sie auf Weiter, um zum Abschnitt Routing zu gelangen.
Geben Sie mindestens eine Hostregel an. Klicken Sie auf Hostregel hinzufügen. Führen Sie dann die folgenden Schritte aus:
Geben Sie unter Hosts mindestens einen Host für den Abgleich an.
Geben Sie unter Beschreibung eine kurze Beschreibung der Hostregel ein.
Alternativ können Sie eine Hostregel bearbeiten, indem Sie auf den Pfeil klicken, um sie zu maximieren.
Geben Sie mindestens eine Routingregel an. Klicken Sie auf Weiterleitungsregel hinzufügen.
Alternativ können Sie eine Routenregel bearbeiten, indem Sie in der entsprechenden Zeile auf
Bearbeiten klicken.Legen Sie im Bereich Routingregel bearbeiten unter Priorität einen Wert für die Routingpriorität fest.
Geben Sie unter Beschreibung eine kurze Beschreibung ein, anhand derer sich die Regel in einer Liste von Regeln leichter identifizieren lässt.
Geben Sie im Bereich Abgleich mindestens eine Übereinstimmungsbedingung an. Klicken Sie auf Abgleichbedingung hinzufügen. Gehen Sie anschließend so vor:
- Wählen Sie unter Keyword-Option eine Pfadoption aus.
Geben Sie unter Pfadübereinstimmung die Namen, Pfade oder Vorlagen an. Sie können den Platzhalterabgleich verwenden.
Wählen Sie bei Bedarf auch Berücksichtigung der Groß-/Kleinschreibung für Pfadwert aktivieren aus.
Optional: Wählen Sie Header-Abgleich und Abfrageparameter-Abgleich aus. Klicken Sie dann auf die entsprechenden Schaltflächen, um Header und Abfrageparameter hinzuzufügen. Geben Sie für jeden den Namen, den Abgleichstyp und den Wert an.
Weitere Informationen finden Sie unter Abgleich mit Headern und Abfrageparametern.
Klicken Sie auf Fertig, um die Abgleichbedingung zu speichern.
Wählen Sie für Primäre Aktion eine der folgenden Optionen aus:
Vom Ursprung abrufen: Wenn Sie Anfragen an einen bestimmten Ursprung weiterleiten möchten, wählen Sie diese Option und dann einen Ursprung aus.
URL-Weiterleitung: Wenn Sie Anfragen weiterleiten möchten, wählen Sie diese Option aus. Geben Sie dann den Weiterleitungstyp, den Pfad und den Statuscode an.
Optional können Sie die Optionen auswählen, um alle Antworten an HTTPS weiterzuleiten oder die Abfrage zu entfernen.
Klicken Sie auf Erweiterte Konfigurationen.
Klicken Sie im Bereich Header-Aktion auf Element hinzufügen.
Wählen Sie einen Aktionstyp aus und geben Sie dann eine Kopfzeile als Namens-/Wertpaar an. Klicken Sie dann auf Fertig.
Klicken Sie im Bereich Routenaktion auf Element hinzufügen.
Geben Sie einen Aktionstyp und die zugehörigen Optionen an. Klicken Sie dann auf Fertig.
Wählen Sie für HTTP-Filtermethode die Option HTTP-Filtermethode anpassen aus.
Wählen Sie dann die HTTP-Methoden aus, die per Proxy an Ihr Ursprungsgerät weitergeleitet werden sollen.
Klicken Sie auf Speichern, um die Routenregel zu speichern.
Klicken Sie auf Dienst aktualisieren, um die Änderungen am Dienst zu speichern.
gcloud und YAML
Exportiere die Media CDN-Konfiguration in eine YAML-Datei. Führen Sie den Befehl
gcloud edge-cache services export
aus.gcloud edge-cache services export SERVICE_NAME \ --destination=FILENAME.yaml
Ersetzen Sie Folgendes:
SERVICE_NAME
: der Name Ihres DienstesFILENAME
: der Name der YAML-Datei
Aktualisieren Sie die YAML-Datei mit der erforderlichen Konfiguration, wie in den Abschnitten auf dieser Seite beschrieben.
Wenn du den Dienst aktualisieren möchtest, importiere die Media CDN-Konfiguration aus der YAML-Datei. Führen Sie den Befehl
gcloud edge-cache services import
aus.gcloud edge-cache services import SERVICE_NAME \ --source=FILENAME.yaml
Anfragen mit Übereinstimmung
Eine Media CDN-Konfiguration enthält eine Reihe von Routen, die im Abschnitt Routing für eine EdgeCacheService
-Ressource definiert sind.
Diese Routen stimmen mit Anfragen überein, die auf mindestens einem Host basieren. Weitere Informationen dazu, wie Traffic an einen Ursprung weitergeleitet wird, findest du unter HostRule
und PathMatcher
.
Jede Route kann ihre eigene CDN-Konfiguration, Umschreibungen, Weiterleitungen, CORS-Richtlinien, benutzerdefinierte HTTP-Header und Ursprungszuordnung definieren.
Routen können Ursprünge teilen.
Sie können beispielsweise Anfragen für Manifeste an einen bestimmten Ursprung weiterleiten und eine kurzlebige Cache-TTL und eine negative Caching-Richtlinie definieren. Anfragen für Segmente können mithilfe von Headern und Abfrageparametern auf einen anderen Ursprung aufgeteilt werden, um bestimmte Manifesttypen oder Nutzer aufzuschlüsseln.
Das folgende Beispiel zeigt, wie Anfragen weitergeleitet werden, die einem bestimmten Header, Abfrageparameter und Pfadpräfix für den Host media.example.com
entsprechen:
name: prod-service routing: hostRules: - hosts: - media.example.com pathMatcher: example_routes pathMatchers: - name: example_routes routeRules: - priority: 10 origin: staging-live-origin matchRules: - prefixMatch: /vod/ headerMatches: - headerName: "x-staging-client" presentMatch: true queryParameterMatches: - name: "live" exactMatch: "yes" routeAction: cdnPolicy: defaultTtl: 5s
Pfadabgleich
Media CDN unterstützt den vollständigen (genauen), Präfix- und Platzhalter-Pfadabgleich. Der Pfadabgleich kann mit einer host-, header- und abfrageparameterbasierten Übereinstimmung kombiniert werden, um detaillierte Anfragenrouting-Regeln zu erstellen.
Es gibt drei Möglichkeiten für den Abgleich mit einem URL-Pfad.
Feld | Beschreibung | Beispiel |
---|---|---|
matchRules[].fullPathMatch
|
Die Bedingung fullPathMatch entspricht dem vollständigen URL-Pfad, der den Abfragestring nicht enthält. Sie müssen gegebenenfalls Schrägstriche angeben.
|
Eine Route mit der Übereinstimmungsregel Ein |
matchRules[].prefixMatch
|
Die Bedingung prefixMatch entspricht dem URL-Pfadpräfix. URLs, die mit demselben String beginnen, werden übereinstimmen.
|
Eine Route mit der Übereinstimmungsregel |
matchRules[].pathTemplateMatch
|
Die Bedingung pathTemplateMatch unterstützt Platzhalteroperatoren, sodass Sie komplexe URL-Muster und Pfadsegmente abgleichen und benannte Variablen zum Umschreiben von URLs erfassen können.
|
Eine Route mit der Übereinstimmungsregel Sowohl Weitere Beispiele finden Sie im Abschnitt Musterabgleich. |
Weitere Informationen finden Sie in der API-Spezifikation für MatchRule
.
Wenn Sie beispielsweise alle Anfragen anhand von /stream/
abgleichen möchten, erstellen Sie eine Routingregel ähnlich der folgenden:
name: prod-service routing: hostRules: - hosts: - media.example.com - *.vod.example.com pathMatcher: example_routes pathMatchers: - name: example_routes routeRules: - priority: 1 matchRules: - prefixMatch: /stream/
In diesem Beispiel wird der abschließende Schrägstrich ausdrücklich in die Übereinstimmungsregel aufgenommen:
- Eine Anfrage an
media.example.com/stream/id/1234/hls/manifest.m3u8
entspricht dieser Route. - Eine Anfrage an
media.example.com/stream-eu/id/4567/hls/manifest.m3u8
entspricht nicht dieser Route.
Im zweiten Fall gibt Media CDN einen HTTP 404
-Fehler zurück, es sei denn, es wurde eine andere Route oder eine Catchall-Route konfiguriert.
Informationen zur Funktionsweise der Rangfolge für Routen mit ähnlichen Präfixen finden Sie im Abschnitt Routenpriorität und -reihenfolge.
Pattern (wildcard) matching
Mit dem Musterabgleich können Sie mithilfe einer Platzhaltersyntax mehrere Teile einer URL abgleichen, einschließlich partieller URLs und Suffixe (Dateierweiterungen).
Sie können auch eine oder mehrere Pfadsegmente mit benannten Variablen in einem pathTemplateMatch
-Feld verknüpfen und dann auf diese Variablen verweisen, wenn Sie die URL in einem pathTemplateRewrite
-Feld umschreiben. So können Sie URL-Segmente neu anordnen und entfernen, bevor die Anfrage an Ihren Ursprung gesendet wird.
Das folgende Beispiel zeigt, wie Sie zwei verschiedene URL-Suffixe abgleichen können:
# EdgeCacheService.routing.pathMatchers[] routeRules: - priority: 1 description: "Match video segments" matchRules: - pathTemplateMatch: "/**.ts" - pathTemplateMatch: "/**.m4s" origin: prod-video-storage
Die unterstützte Syntax umfasst Folgendes:
Operator | Stimmt überein mit | Beispiel |
---|---|---|
*
|
Entspricht einem einzelnen Pfadsegment bis zum nächsten Pfadtrennzeichen: /
|
/videos/*/*/*.m4s entspricht /videos/123414/hls/1080p5000_00001.m4s . |
**
|
Entspricht null oder mehr Pfadsegmenten. Falls vorhanden, muss es sich um den letzten Operator handeln. | /**.mpd entspricht /content/123/india/dash/55/manifest.mpd . |
{name} or {name=*}
|
Benannter Variable, die einem Pfadsegment entspricht.
Entspricht einem einzelnen Pfadsegment bis zum nächsten Pfadtrennzeichen: |
/content/{format}/{lang}/{id}/{file}.vtt entspricht /content/hls/en-us/12345/en_193913.vtt und erfasst format="hls" , lang="en-us" , id="12345" und file="en_193913" als Variablen.
|
{name=videos/*}
|
Eine benannte Variable, die mit mehr als einem Pfadsegment übereinstimmt. Das Pfadsegment, das mit videos/* übereinstimmt, wird als benannte Variable erfasst.
|
/videos/{language=lang/*}/* gleicht /videos/lang/en/video.m4s ab und füllt die Pfadvariable language mit dem Wert lang/en aus.
|
{name=**}
|
Eine benannte Variable, die null oder mehr Pfadsegmenten entspricht. Falls vorhanden, muss es sich um den letzten Operator handeln. |
|
Hinweise:
- Wenn Sie keine URL neu schreiben, verwenden Sie die einfacheren Operatoren
*
und**
. - Wenn Sie Variablen zum Erfassen von Pfadsegmenten verwenden, können Teile der URL, die nicht von einer Variablen erfasst werden, in einem nachfolgenden
pathTemplateRewrite
referenziert werden. Ein Beispiel finden Sie im Abschnitt Pfadvariablen erfassen. - Sie können nicht auf Variablen in einem nachfolgenden
pathTemplateRewrite
verweisen, die impathTemplateMatch
in derselben Route nicht vorhanden sind. - Bei Variablen wird die Groß- und Kleinschreibung berücksichtigt, wobei
{FORMAT}
,{forMAT}
und{format}
für verschiedene Variablen und Werte stehen. - Sie können bis zu 10 Operatoren (Platzhalter oder Variablen) in einer Übereinstimmung angeben.
Die Felder
pathTemplateMatch
undpathTemplateRewrite
dürfen 255 Zeichen nicht überschreiten.
Beispiel: Übereinstimmung mit einer Dateiendung
Das folgende Beispiel zeigt einen häufigen Anwendungsfall für Platzhalteroperatoren: Abgleich aller Pfadsegmente bis zu einem Suffix.
In diesem Fall tun Sie Folgendes:
- Rufen Sie Videomanifeste (Playlists) mit der Endung
.m3u8
und.mpd
vom Ursprung des Manifest ab, wobei eine kurze TTL (5 Sekunden) auf diese Antworten angewendet wird, da sie sich regelmäßig ändern. - Rufen Sie Videosegmente mit den Endungen
.ts
und.m4s
vom Ursprungsort des Segments ab, und wenden Sie auf diese Antworten eine längere TTL (1 Tag) an.
Dieser Ansatz wird häufig bei der Verwendung von SSAI- (Server-Side Ad Injection) oder DAI-Diensten (Dynamic Ad Insertion) sowie bei Live-Videos verwendet, bei denen das Manifest alle paar Sekunden aktualisiert wird.
Die folgende Konfiguration zeigt, wie Sie Ihr Media CDN-Routing so konfigurieren, dass es dies unterstützt:
name: prod-service routing: hostRules: - hosts: - media.example.com pathMatcher: example_routes pathMatchers: - name: example_routes routeRules: # the first route only matches video manifests - priority: 1 matchRules: - pathTemplateMatch: "/**.m3u8" # "**" matches all path segments - pathTemplateMatch: "/**.mpd" origin: manifest-origin routeAction: cdnPolicy: cacheMode: FORCE_CACHE_ALL defaultTtl: 5s # the second route matches video segments, fetches them # from a separate origin server, caching them for a longer # duration (1 day). - priority: 2 matchRules: - pathTemplateMatch: "/**.ts" - pathTemplateMatch: "/**.m4s" origin: segment-origin routeAction: cdnPolicy: cacheMode: FORCE_CACHE_ALL defaultTtl: 86400s
Beispiel: Pfadvariablen erfassen
Im folgenden Beispiel wird gezeigt, wie benannte Variablen zur Beschreibung eines oder mehrerer Pfadsegmente verwendet werden.
Diese Variablen können in einem pathTemplateRewrite
verwendet werden, um den Pfad vor dem Senden der Anfrage an den Ursprung umzuschreiben oder um einen komplexen selbstbeschreibenden pathTemplateMatch
zu erstellen.
routing: hostRules: - hosts: - media.example.com pathMatcher: example_routes pathMatchers: - name: example_routes routeRules: - priority: 1 matchRules: # Matches a request of "/us/en/hls/123139139/segments/00001.ts" - pathTemplateMatch: "/{country}/{lang}/{format}/{id}/{file=**}" origin: my-origin routeAction: urlRewrite: # Rewrites to "/123139139/hls/segments/00001.ts" pathTemplateRewrite: "/{id}/{format}/{file}"
Zum Beispiel:
- Jede Variable
{name}
erfasst ein einzelnes Pfadsegment. Ein Pfadsegment besteht aus allen Zeichen zwischen einem/
-Paar (Schrägstriche) in einem URL-Pfad. - Eine
{name=**}
-Variable erfasst alle verbleibenden Pfadsegmente. In diesem Fall entspricht es sowohlsegments/00001.ts
als auchmaster.m3u8
. - Im
pathTemplateRewrite
auf derselben Route verweisen Sie auf einige der Variablen, die Sie impathTemplateMatch
erfasst haben. Sie lassen die Variablen{country}
und{lang}
explizit weg, da sie nicht mit der Verzeichnisstruktur am Ursprung übereinstimmen.
In diesem Beispiel geschieht Folgendes:
- Eine eingehende Anfrage-URL von
/us/en/hls/123139139/segment_00001.ts
entspricht dempathTemplateMatch
und wird zu/123139139/hls/segment_00001.ts
umgeschrieben, bevor sie an den Ursprung gesendet wird. - Eine eingehende Anfrage-URL von
/us/123139139/master.m3u8
entspricht nicht dempathTemplateMatch
und erhält eine HTTP404 (Not Found)
-Antwort. - Eine eingehende Anfrage-URL von
/br/es/dash/c966cbbe6ae3/subtitle_00001.vtt
entspricht ebenfalls dempathTemplateMatch
und wird zu/c966cbbe6ae3/dash/subtitle_00001.vtt
umgeschrieben, bevor sie an den Ursprung gesendet wird.
Weitere Informationen zur Funktionsweise des Platzhalterabgleichs mit der URL-Umschreibung finden Sie im Abschnitt Umschreibungen.
Hostabgleich
Jeder Dienst kann mehrere Hostnamen abgleichen, wobei jede Gruppe von Hostnamen eine eigene Gruppe von Routen enthält (Pfad-Matcher). Im häufigsten Fall werden alle Hostnamen für einen Dienst einem einzelnen Satz freigegebener Routen mit einer einzelnen Liste von Hosts und einem einzelnen Pfad-Matcher zugeordnet.
name: prod-service routing: hostRules: - hosts: - media.example.com - *.vod.example.com pathMatcher: example_routes pathMatchers: - name: example_routes routeRules: # list of routes for the configured hosts - priority: 999 matchRules: - prefixMatch: / origin: DEFAULT_ORIGIN
Hosts, die nicht übereinstimmen, werden als Standard-HTTP 404
-Seite bereitgestellt. Wenn Sie einen Host akzeptieren möchten, können Sie das Platzhalterzeichen *
als hostRules[].hosts[]
-Eintrag einfügen.
Sie können auch Gruppen von Routen definieren (z. B. nach Land oder Live vs. On demand gruppieren). Da jeder Dienst eine einzelne Sicherheitsrichtlinie hat, empfehlen wir im Allgemeinen einen Dienst für jeden Markt (Geografie) oder jede Arbeitslast, die Sie haben.
Hinweise:
- Hostheader (oder HTTP/2
:authority
) mit einem Port werden implizit mit einem konfigurierten Host abgeglichen. Sie müssen die Ports nicht explizit angeben. - Wenn die Anfrage über HTTP erfolgt, entspricht ein
hostRules[].hosts[]
-Eintrag von*.vod.example.com
den Wertenus.vod.example.com
undus.vod.example.com:80
. - Wenn die Anfrage über HTTPS (TLS) erfolgt, entspricht ein
hostRules[].hosts[]
-Eintrag von*.vod.example.com
dem Wertus.vod.example.com:443
.
Weitere Informationen finden Sie in der API-Spezifikation für HostRule
.
Abgleich mit Headern und Abfrageparametern
Sie können Routen so konfigurieren, dass sie auf bestimmte Header- und Abfrageparameternamen sowie auf das Vorhandensein eines Headerwerts (Präfix, Suffix oder exakte Übereinstimmung) abgeglichen werden.
Der Abgleich von Abfrageparametern und Headern ist ein logisches „UND“. Die Anfrage muss mit allen Abfrageparametern und Header-Schlüsseln (und Werten, falls angegeben) übereinstimmen, um der angegebenen Route zu entsprechen.
Wenn Sie beispielsweise Anfragen mit einem bestimmten Headerfeldnamen und Headerwert an einen Ursprung namens alternate-origin
weiterleiten möchten, konfigurieren Sie die Übereinstimmungsbedingungen in routeRules[].matchRules[].headerMatches[]
:
name: prod-service routing: hostRules: - hosts: - media.example.com pathMatcher: example_routes pathMatchers: - name: example_routes routeRules: - priority: 1 origin: alternate-origin matchRules: - prefixMatch: "/videos/" headerMatches: - headerName: "x-device-name" exactMatch: "roku"
In diesem Beispiel stimmen Anfragen mit /videos/
am Anfang der URL und dem Header x-device-name: roku
mit dieser Route überein. Anfragen, denen dieser Header-Name fehlt oder die einen anderen Wert haben, stimmen nicht mit dieser Route überein.
Weitere Informationen finden Sie in der API-Spezifikation für HeaderMatch
.
Für einen Abgleich mit Abfrageparametern geben Sie einen oder mehrere queryParameterMatches
so an:
name: prod-service routing: hostRules: - hosts: - media.example.com pathMatcher: example_routes pathMatchers: - name: example_routes routeRules: - priority: 1 origin: eu-live-origin-prod matchRules: - prefixMatch: "/videos/" queryParameterMatches: - name: "playback_type" exactMatch: "live" - name: "geo" exactMatch: "eu"
In diesem Beispiel entspricht eine Clientanfrage von https://cdn.example.com/videos/1234/abcd/xyz.m3u8?playback_type=live&geo=eu
dieser Route.
Weitere Informationen finden Sie in der API-Spezifikation für QueryParameterMatcher
.
Catchall-Route definieren (Standard)
Standardmäßig gibt Media CDN einen HTTP 404 (Not Found)
-Fehler zurück, wenn eine Anfrage mit keiner der konfigurierten Routen übereinstimmt.
So konfigurieren Sie eine Catchall-Route für einen bestimmten pathMatcher
(Sammlung von Routen):
- Erstellen Sie eine
routeRule
mit der niedrigsten Priorität (höchste Zahl), z. B. 999, also die niedrigste Route-Priorität. - Konfigurieren Sie eine
matchRule
mit dem Präfixabgleich/
(stimmt mit allen Anfragepfaden überein). - Konfigurieren Sie (eins davon) einen
origin
oderurlRedirect
auf der Route.
Um beispielsweise eine Catchall-Route zu konfigurieren, die alle nicht übereinstimmenden Anfragen an einen Standardursprung mit dem Namen my-origin
weiterleitet, erstellen Sie so eine neue Route mit priority: 999
und einem matchRules[].prefixMatch
von /
:
name: prod-service routing: hostRules: - hosts: - cdn.example.com pathMatcher: example_routes pathMatchers: - name: example_routes routeRules: - priority: 999 origin: my-origin matchRules: - prefixMatch: /
Sie können die URL optional vor dem Ursprungsabruf neu schreiben oder zu einer Standardseite (z. B. Ihrer Landingpage) weiterleiten, anstatt die Anfrage unverändert an den Ursprung zu senden.
Routenpriorität und -bestellung
Jeder Route in einem Array von routeRules[]
muss eine priority
zugeordnet sein.
Für spezifischere Routen sollten Sie eine höhere Priorität (kleinere Zahl) festlegen. Eine Route, die mit dem Präfix /stream/
und der Priorität 1 übereinstimmt, verhindert andernfalls, dass die spezifischere Route /stream/live/eu/
mit einer Priorität von 5 mit Anfragen abgeglichen wird.
- Die Route mit der höchsten Priorität ist „1“ und die niedrigste ist „999“.
- Sie können nicht zwei oder mehr Routingregeln mit derselben Priorität konfigurieren. Für jede Regel muss die Priorität mit einer Zahl zwischen 1 bis einschließlich 999 festgelegt werden.
- Wenn Sie eine Catchall-Route definieren, können Sie alle nicht übereinstimmenden Anfragen an einen Standardursprung senden oder sie an eine Landingpage oder einen Endpunkt weiterleiten.
Im folgenden Beispiel sehen Sie, dass die Route /live/us/
nie abgeglichen wird, da die Route /live/
eine höhere Priorität hat:
routeRules: - priority: 1 description: "Live routes" matchRules: - prefixMatch: /live/ routeAction: cdnPolicy: defaultTtl: 5s - priority: 2 description: "U.S based live streams" matchRules: # This would never be matched, as the /live/ prefixMatch at priority 1 # would always take precedence. - prefixMatch: /live/us/ routeAction: cdnPolicy: defaultTtl: 5s - priority: 999 description: "Catch-all route" matchRules: - prefixMatch: /
Zur Behebung dieses Problems legen Sie die spezifischere (längere) Route mit einer höheren Priorität fest:
routeRules: - priority: 1 description: "U.S based live streams" matchRules: # The more specific (longer) match is at a higher priority, and now # matches requests as expected. - prefixMatch: /live/us/ routeAction: cdnPolicy: defaultTtl: 5s - priority: 2 description: "Live routes" matchRules: - prefixMatch: /live/ routeAction: cdnPolicy: defaultTtl: 5s - priority: 999 description: "Catch-all route" matchRules: - prefixMatch: /
Dadurch kann die spezifischere Route Anfragen korrekt abgleichen. Eine Anfrage mit dem Präfix /live/eu/
würde trotzdem der Route /live/
mit der Priorität 2 zugeordnet werden.
Methodenfilter
Standardmäßig werden mit Media CDN nur die Methoden GET
, HEAD
und OPTIONS
an deinen Ursprung weitergeleitet. Methoden, die deinen Ursprung ändern können, werden herausgefiltert.
Sie können dieses Standardverhalten für eine bestimmte Routenregel überschreiben, indem Sie die Methoden angeben, die an Ihren Ursprung weitergeleitet werden sollen. Neben GET
, HEAD
und OPTIONS
unterstützt Media CDN auch PUT
, POST
, DELETE
und PATCH
.
Wenn Sie die Unterstützung für eine Reihe von Methoden für eine Routenregel konfigurieren möchten, geben Sie einen Abschnitt routeMethods
mit einem allowed_methods
-Wert für jede Methode an.
routeRules: - priority: 5 description: "Video uploads" routeMethods: allowedMethods: ["PUT", "POST", "OPTIONS"] matchRules: - pathTemplateMatch: "/uploads/**.ts" origin: prod-video-storage - priority: 10 description: "Video serving" routeMethods: allowedMethods: ["GET", "HEAD"] matchRules: - pathTemplateMatch: "/videos/**.ts" origin: prod-video-storage
Pfadnormalisierung
Die Pfadnormalisierung beschreibt, wie Media CDN mehrere Darstellungen einer URL in einer bestimmten, kanonischen Darstellung unter bestimmten Szenarien kombiniert.
Die Pfadnormalisierung kann die Cache-Trefferraten direkt verbessern. Dazu wird die Anzahl der Anforderungs-URLs reduziert, die denselben Inhalt repräsentieren, und es werden Herkunftsfehler für Ursprünge verringert, die normalisierte Pfade erwarten.
Eingehende Anfragen werden so normalisiert:
- Mehrere aufeinanderfolgende Schrägstriche werden zu einem einzelnen Schrägstrich zusammengeführt. Beispielsweise wird ein URL-Pfad von
/videos///12345/manifest.mpd
auf/videos/12345/manifest.mpd
normalisiert. - Pfadsegmente werden gemäß RFC 3986, Abschnitt 6.2.2.3 normalisiert.
Beispielsweise wird der Pfad
/a/b/c/./../../g
auf der Grundlage des in RFC 3986 definierten Algorithmus Punktsegmente entfernen auf/a/g
normalisiert. Diese Normalisierung erfolgt, bevor der Cache überprüft oder die Anfrage an den Ursprung weitergeleitet wird. - Anfragen werden nicht mit Prozentcodierung normalisiert. Beispielsweise wird eine URL mit einem prozentcodierten Schrägstrich (
%2F
) nicht in die nicht unverschlüsselte Form umgewandelt.
Bei URLs wird weiterhin zwischen Groß- und Kleinschreibung unterschieden und die Großschreibung nicht normalisiert. Viele URLs enthalten base64-Codierungen bei Groß- und Kleinschreibung, einschließlich URLs mit signierten Anfragetokens.
Umschreibungen und Weiterleitungen
In den folgenden Abschnitten finden Sie Beispiele für das Umschreiben von Anfragen und die Konfiguration von Umleitungen.
Anfrage-URLs umschreiben
Media CDN unterstützt das Umschreiben von Hosts und Pfaden. Durch Umschreibungen wird die an den Ursprung gesendete URL geändert und Sie können nach Bedarf Hosts und Pfade ändern. Host- und Pfadumschreibungen erfolgen auf Routenebene, sodass Sie festlegen können, welche spezifischen Anfragen auf der Grundlage eines beliebigen Matchers, einschließlich Pfad, Abfrageparameter und Anfrageheader, umgeschrieben werden.
Weitere Informationen finden Sie in der API-Spezifikation für RouteAction.UrlRewrite
.
Es gibt drei Möglichkeiten, eine Anfrage neu zu schreiben:
Feld | Beschreibung |
---|---|
urlRewrite.pathPrefixRewrite
|
Schreibt den Pfad neu und entfernt das in der
In einer einzelnen Routingregel kann nur entweder |
urlRewrite.pathTemplateRewrite
|
In einer einzelnen Routingregel kann nur entweder |
urlRewrite.hostRewrite
|
Der Host wird neu geschrieben, bevor die Anfrage an den Ursprungsserver gesendet wird. |
Hinweise:
- Umgeschriebene URLs ändern den Cache-Schlüssel nicht. Der Cache-Schlüssel basiert auf der vom Client gesendeten Anfrage-URL.
- Das Umschreiben erfolgt nach dem Routenabgleich und der Validierung der signierten Anfrage. Routen werden nicht mit einer anderen Übereinstimmungsregel neu abgeglichen.
Beispiel: Pfadpräfix entfernen
Um beispielsweise die Clientanfrage-URL von /vod/videos/hls/1234/abc.ts
in /videos/hls/1234/abc.ts
umzuschreiben (wobei /vod
aus dem Pfad entfernt wird), können Sie die Funktion pathPrefixRewrite
verwenden:
name: prod-service routing: hostRules: - hosts: - cdn.example.com pathMatcher: example_routes pathMatchers: - name: example_routes routeRules: - priority: 1 origin: my-origin matchRules: - prefixMatch: "/vod/videos/" routeAction: urlRewrite: pathPrefixRewrite: "/videos/"
Ein pathPrefixRewrite
ersetzt das gesamte im matchRules[].prefixMatch
übereinstimmende Pfadpräfix durch den Wert von pathPrefixRewrite
.
Um einen Hostnamen umzuschreiben (z. B. cdn.example.com
auf my-bucket.s3.us-west-2.amazonaws.com
), können Sie Folgendes konfigurieren:
name: prod-service routing: hostRules: - hosts: - cdn.example.com pathMatcher: example_routes pathMatchers: - name: example_routes routeRules: - priority: 1 origin: my-origin matchRules: - prefixMatch: "/videos/" routeAction: urlRewrite: hostRewrite: "my-bucket.s3.us-west-2.amazonaws.com"
In diesem Fall würde sich die ursprüngliche Anfrage-URL von cdn.example.com/videos/*
in my-bucket.s3.us-west-2.amazonaws.com/videos/*
ändern.
Sie können auch Host- und Pfadumschreibungen innerhalb einer einzigen Route kombinieren.
Beispiel: Variablen zum Umschreiben von URLs verwenden
Wie Sie pathTemplateMatch
und pathTemplateRewrite
verwenden, um Teile einer eingehenden Anfrage-URL umzuschreiben, erfahren Sie im Abschnitt über Variablen erfassen.
Anfragen weiterleiten
Media CDN unterstützt drei Arten von Weiterleitungen:
- Hostweiterleitungen, die nur den Host (Domain) weiterleiten, wobei die Pfad- und Abfrageparameter unverändert bleiben.
- Pfadweiterleitungen, die den Pfad vollständig ersetzen.
- Pfadpräfixweiterleitungen, die nur das übereinstimmende Präfix ersetzen.
Weiterleitungen sind standardmäßig auf HTTP 301 (Moved Permanently)
gesetzt, können jedoch so konfiguriert werden, dass sie unterschiedliche Weiterleitungsstatuscodes pro Route zurückgeben.
Die folgende Konfiguration ist ein Beispiel für eine präfixbasierte Weiterleitung, bei der Nutzer, die https://cdn.example.com/on-demand/*
besuchen, auf https://cdn.example.com/streaming/*
umgeleitet werden.
name: prod-service routing: hostRules: - hosts: - cdn.example.com pathMatcher: example_routes pathMatchers: - name: example_routes routeRules: - priority: 10 matchRules: - prefixMatch: "/on-demand/" urlRedirect: # The prefix matched in matchRules.prefixMatch is replaced # by this value prefixRedirect: "/streaming/" redirectResponseCode: TEMPORARY_REDIRECT # corresponds to a HTTP 307
In diesem Beispiel wird die Umleitung auch in eine temporäre Umleitung umgewandelt, die verhindert, dass Clients (z. B. Browser) sie zwischenspeichern können. Dies kann nützlich sein, wenn Sie davon ausgehen, dass sie in naher Zukunft geändert werden soll.
Die unterstützten redirectResponseCode
-Werte sind in der folgenden Tabelle aufgeführt.
Antwortcode weiterleiten | HTTP-Statuscode |
---|---|
MOVED_PERMANENTLY_DEFAULT |
HTTP 301 (Dauerhaft verschoben) |
FOUND |
HTTP 302 (Gefunden) |
SEE_OTHER |
HTTP 303 (Weitere anzeigen) |
TEMPORARY_REDIRECT |
HTTP 307 (Vorübergehende Weiterleitung) |
PERMANENT_REDIRECT |
HTTP 308 (Permanente Weiterleitung) |
Hinweise:
- Eine Route kann entweder Traffic an einen Ursprung weiterleiten oder eine Weiterleitung an den Client zurückgeben. Sie können die Felder
origin
undurlRedirect
nicht gleichzeitig festlegen. - Für Routen, die an HTTPS weiterleiten, muss mindestens ein SSL-Zertifikat mit dem Dienst verbunden sein.
Weitere Informationen finden Sie in der API-Spezifikation für RouteRule.UrlRedirect
.
Alle Anfragen an HTTPS weiterleiten
Um alle Anfragen auf HTTPS (anstelle von HTTP) umzuleiten, können Sie jeden Ihrer Dienste so konfigurieren, dass alle Client-Anfragen automatisch auf HTTPS umgeleitet werden. Clients, die sich über HTTP verbinden, erhalten eine HTTP 301 (Permanent Redirect)
-Antwort mit dem Header Location
, der auf dieselbe URL gesetzt ist, wobei „https://“ anstelle von „http://“ verwendet wird.
gcloud
gcloud edge-cache services update MY_SERVICE \ --require-tls
Request issued for: [MY_SERVICE] Updated service [MY_SERVICE].
Der Befehl gibt eine Beschreibung Ihres Dienstes zurück, wobei requireTls
jetzt auf true
gesetzt ist.
name: MY_SERVICE requireTls: true
Sie können auch den Header Strict-Transport-Security als Antwortheader festlegen, damit Clients immer direkt über HTTPS eine Verbindung herstellen.
Speicher-Back-Ends von Drittanbietern verwenden
Media CDN unterstützt die Verbindung zu öffentlich erreichbaren HTTP-Endpunkten außerhalb von Google Cloud, einschließlich AWS S3-Storage-Buckets, Azure Blob Storage und anderen Speicheranbietern. Dies kann nützlich sein, wenn Sie eine Multi-Cloud-Architektur haben oder noch Daten mithilfe des Storage Transfer Service in Cloud Storage migrieren müssen.
Eine minimale Ursprungskonfiguration, die einen virtuellen gehosteten Bucket in AWS S3 konfiguriert:
name: MY_S3_ORIGIN originAddress: BUCKET-NAME.s3.REGION.amazonaws.com
Wenn Sie keinen Bucket-Namen verwenden, der mit den für Ihre EdgeCacheService
-Ressourcen konfigurierten Hostnamen übereinstimmt, müssen Sie auch eine Hostumschreibung für Routen konfigurieren, die mit diesem Ursprung (oder diesen Ursprüngen) verbunden sind. Andernfalls wird der von der Clientanfrage festgelegte Host-Header beim Abrufen vom Ursprung verwendet.
Wenn Sie beispielsweise alle Anfragen mit dem Pfadpräfix /legacy/
Ihrem externen Bucket zuordnen möchten, können Sie sowohl einen hostRewrite
als auch einen pathPrefixRewrite
konfigurieren, um dieses Präfix aus der ursprünglichen Anfrage zu entfernen:
routeRules: - description: legacy backend matchRules: - prefixMatch: "/legacy/" routeAction: urlRewrite: hostRewrite: BUCKET-NAME.s3.REGION.amazonaws.com pathPrefixRewrite: / cdnPolicy: cacheMode: CACHE_ALL_STATIC defaultTtl: 3600s
Weitere Informationen dazu, wie der Hostheader bei Ursprungsanfragen festgelegt wird, finden Sie in der Dokumentation Ursprungsanfragenheader.
Cross-Origin Resource Sharing (CORS)
Cross-Origin Resource Sharing (CORS) ist ein browserbasierter Ansatz, um plattformübergreifende Anfragen sicher zu senden.
Mit CORS-Richtlinien (Cross-Origin Resource Sharing) können Sie CORS-Header wie Access-Control-Allow-Origins
anhand einer Richtlinie pro Route automatisch festlegen.
CORS konfigurieren
Mit Media CDN kannst du eine CORS-Richtlinie für eine Route für eine EdgeCacheService
definieren.
Eine CORS-Richtlinie definiert diese Regeln mit einer gemeinsamen Reihe von HTTP-Headern. Sie können gängige CORS-Header in Antworten festlegen, z. B. Access-Control-Allow-Origin
, Access-Control-Max-Age
und Access-Control-Allow-Headers
. Mit diesen Headern können Sie quellenübergreifende Aufrufe an Ihre Media CDN-Dienste tätigen, die möglicherweise auf einer anderen Domain (Ursprung) gehostet werden als das Frontend Ihrer Website, und quellenübergreifende Anfragen verhindern, die Sie nicht ausdrücklich zulassen.
Angenommen, player.example.com
und api.example.com
sind unterschiedliche Ursprünge (im Browsersinn). Du möchtest, dass deine Frontend-Anwendung Anfragen an api.example.com
sendet, um die nächste Playlist abzurufen oder eine Liste ähnlicher Inhalte zu aktualisieren. Ebenso muss player.example.com
möglicherweise cdn.example.com
kontaktieren, um Videoplaylists und Videosegmente abzurufen: cdn.example.com
muss bestätigen, dass dies in Ordnung ist und dass player.example.com
ein allowed origin
ist, sowie alle anderen Regeln angeben (zulässige Header, ob Cookies enthalten sein dürfen).
Wenn Sie beispielsweise stream.example.com
als Ursprung und einen X-Client-ID
-Header in CORS-Anfragen zulassen möchten, können Sie eine corsPolicy
für eine Route so konfigurieren:
corsPolicy: maxAge: 600 allowOrigins: ["stream.example.com"] allowHeaders: ["X-Client-ID"]
Eine corsPolicy
ist unter routing.pathMatchers[].routeRules[].routeAction.corsPolicy
in einem EdgeCacheService konfiguriert. Für jede routeRule
kann bei Bedarf eine andere corsPolicy
oder auch gar keine definiert werden.
Wenn Sie einen corsPolicy
-Wert definieren und auch einen benutzerdefinierten Antwortheader festlegen, indem Sie die responseHeadersToAdd
-Felder in einer Route mit demselben Namen verwenden, hat der benutzerdefinierte Antwortheader Vorrang vor dem corsPolicy
-Wert und wird anstelle dieses Werts verwendet.
Wenn in der Ursprungsantwort HTTP-Header festgelegt sind und Sie einen corsPolicy
-Wert festgelegt haben, werden stattdessen die corsPolicy
-Werte verwendet. Die Werte werden nicht minimiert oder kombiniert, um zu verhindern, dass ungültige Header-Werte an einen Client gesendet werden oder versehentlich eine weniger restriktive Richtlinie als beabsichtigt festgelegt wird.
Der spezielle {origin_request_header}
wird in der Clientanfrage mit dem Origin
-HTTP-Header ausgefüllt. Dieser kann als benutzerdefinierter Antwortheaderwert für eine Route für den Access-Control-Allow-Origin
-Header festgelegt werden.
Weitere Informationen finden Sie in der API-Spezifikation für RouteAction.CORSPolicy
.
Felder für CORS-Richtlinien
In der folgenden Tabelle werden die Felder beschrieben, die eine CORS-Richtlinie enthält.
Feld | Beschreibung | Beispiel |
---|---|---|
allowOrigins |
Legt den Antwortheader
Wenn Ihre Videoinhalte beispielsweise von |
Access-Control-Allow-Origins: https://stream.example.com
|
maxAge |
Legt den Antwortheader Einige Browser begrenzen diesen Wert auf zwei Stunden oder weniger, auch wenn der Höchstwert (86.400 s) angegeben ist. |
Access-Control-Max-Age: 7200
|
allowMethods |
Legt den Antwortheader Standardmäßig unterstützt Media CDN nur die Methoden |
Access-Control-Allow-Methods: GET, OPTIONS, HEAD
|
allowHeaders |
Legt den Header Dies wird häufig von Videoplayern benötigt, die auf einige Antwortheader für Videoinhalte zugreifen müssen, wenn sie diese ursprungsübergreifend anfordern. |
Access-Control-Allow-Headers: Content-Type, If-Modified-Since,
Range, User-Agent
|
exposeHeaders |
Legt den Antwortheader Dies wird häufig von Videodateien benötigt, die möglicherweise auf bestimmte Antwortheader für Videoinhalte zugreifen müssen, wenn quellenübergreifend angefordert wird. |
Access-Control-Expose-Headers: Date, Cache-Status, Content-Type,
Content-Length
|
allowCredentials |
Legt den Antwort-Header Dieser Header wird weggelassen, wenn er auf „false“ gesetzt wird. |
Access-Control-Allow-Credentials: true
|
disabled |
Deaktiviert corsPolicy , ohne sie zu entfernen. Preflight-OPTIONS -Anfragen werden an den Ursprung weitergeleitet.
|
– |
Beispiel für corsPolicy
Das folgende Konfigurationsbeispiel zeigt eine einfache corsPolicy
-Konfiguration:
routeRules: - priority: 1 matchRules: - prefixMatch: /stream/ routeAction: cdnPolicy: defaultTtl: 3600s corsPolicy: allowOrigins: - "https://stream.example.com" - "https://stream-staging.example.com" maxAge: 86400s # some browsers might only honor up to 7200s or less allowMethods: - "GET" - "HEAD" - "OPTIONS" allowHeaders: - "Content-Type" - "If-Modified-Since" - "Range" - "User-Agent" exposeHeaders: - "Content-Type" - "Content-Length" - "Date"
Fehlerbehebung beim Routing
Wenn bei einigen Anfragen keine übereinstimmenden Ergebnisse zurückgegeben werden oder Fehler auftreten, prüfen Sie Folgendes:
- Eine Route muss eine
matchRule
mit genau einem der WerteprefixMatch
,fullPathMatch
oderpathTemplateMatch
definieren. Die API gibt einen Fehler zurück, wenn Sie keines dieser Felder angeben. - Achten Sie darauf, dass die
priority
jeder Route korrekt festgelegt ist: Spezifischere (längere) Routen sollten eine höhere Priorität gegenüber kürzeren, breiteren Routen erhalten. - Standardmäßig werden nur
GET
-,HEAD
- undOPTIONS
-Anfragen unterstützt. Informationen zum Konfigurieren des Supports für andere Methoden finden Sie unter Routenmethoden. Methoden, die für eine bestimmte Route nicht aktiviert sind, werden mit einem HTTP-405 (Method Not Allowed)
-Fehler abgelehnt. - HTTP-
GET
-Anfragen mit einem Textkörper oder alle Anfragen mit Anhängen werden mit dem HTTP-400
-Fehler abgelehnt, da Anfragetexte inGET
-Anfragen nicht zulässig sind. - Der Abgleich von Abfrageparametern und Headern ist ein logisches „UND“. Die Anfrage muss mit allen Abfrageparametern oder Header-Schlüsseln (und Werten, falls angegeben) übereinstimmen, um der angegebenen Route zu entsprechen.
Nächste Schritte
- Lesen Sie die Dokumentation zum Konfigurieren von Caching.
- Informieren Sie sich darüber, wie Sie Verbindungen zu verschiedenen Ursprüngen herstellen.
- Richten Sie TLS-Zertifikate (SSL) für Ihren Dienst ein.
- Konfigurieren Sie signierte Anfragen, um den Zugriff auf Inhalte zu authentifizieren.