Media CDN offre funzionalità avanzate di routing HTTP che consentono di mappare il traffico a origini e configurazioni perimetrale specifiche a un livello granulare.
Configurare una regola di route
Configura una regola di route per un servizio Media CDN.
Console
Nella console Google Cloud , vai alla pagina Media CDN.
Per aprire la pagina Dettagli del servizio per il quale vuoi configurare una regola di routing, fai clic sul nome del servizio.
Per passare alla modalità di modifica, fai clic sul pulsante Modifica.
Per passare alla sezione Routing, fai clic su Avanti.
Specifica almeno una regola host. Fai clic su Aggiungi regola host. Poi, procedi nel seguente modo:
Per Host, specifica almeno un host per la corrispondenza.
In Descrizione, fornisci una breve descrizione della regola host.
In alternativa, per modificare una regola host, fai clic sulla freccia per espanderla.
Specifica almeno una regola di route. Fai clic su Aggiungi regola di percorso.
In alternativa, per modificare una regola di routing, fai clic su Modifica nella riga corrispondente.
Nel riquadro Modifica regola di route, per Priorità, imposta un valore per la priorità della route.
In Descrizione, fornisci una breve descrizione che possa aiutare a identificare la regola in un elenco di regole.
Nella sezione Corrispondenza, specifica almeno una condizione di corrispondenza. Fai clic su Aggiungi una condizione di corrispondenza. Quindi:
- Per Tipo di corrispondenza, seleziona un'opzione di corrispondenza esatta.
Per Corrispondenza percorso, specifica i nomi, i percorsi o i modelli. Valuta la possibilità di utilizzare la corrispondenza di pattern con caratteri jolly.
Se necessario, seleziona anche Attiva la distinzione tra maiuscole e minuscole per il valore del percorso.
(Facoltativo) Seleziona Corrispondenza intestazioni e Corrispondenza parametri di query. Poi, fai clic sui pulsanti pertinenti per aggiungere intestazioni e parametri di ricerca. Per ciascuno, specifica il nome, il tipo di corrispondenza e il valore.
Per ulteriori informazioni, vedi Corrispondenza con intestazioni e parametri di query.
Per salvare la condizione di corrispondenza, fai clic su Fine.
Per Azione principale, seleziona una delle seguenti opzioni:
Recupera da un'origine: per indirizzare le richieste a un'origine specifica, seleziona questa opzione, quindi seleziona un'origine.
Reindirizzamento URL: per reindirizzare le richieste, seleziona questa opzione. Poi specifica il tipo di reindirizzamento, il percorso e il codice di stato.
(Facoltativo) Seleziona le opzioni per reindirizzare tutte le risposte a HTTPS o per rimuovere la query.
Fai clic su Configurazioni avanzate.
Nella sezione Azione intestazione, fai clic su Aggiungi un elemento.
Seleziona un tipo di azione e poi specifica un'intestazione come coppia nome-valore. Poi fai clic su Fine.
Nella sezione Azione del percorso, fai clic su Aggiungi un elemento.
Specifica un tipo di azione e le relative opzioni. Poi fai clic su Fine.
Per Filtro del metodo HTTP, seleziona Personalizza filtro del metodo HTTP.
Quindi, seleziona i metodi HTTP di cui vuoi eseguire il proxy all'origine.
Per salvare la regola di routing, fai clic su Salva.
Per salvare le modifiche al servizio, fai clic su Aggiorna servizio.
gcloud e YAML
Esporta la configurazione di Media CDN in un file YAML. Utilizza il comando
gcloud edge-cache services export.gcloud edge-cache services export SERVICE_NAME \ --destination=FILENAME.yamlSostituisci quanto segue:
SERVICE_NAME: il nome del servizioFILENAME: il nome del file YAML
Aggiorna il file YAML con la configurazione richiesta, come descritto nelle sezioni di questa pagina.
Per aggiornare il servizio, importa la configurazione di Media CDN dal file YAML. Utilizza il comando
gcloud edge-cache services import.gcloud edge-cache services import SERVICE_NAME \ --source=FILENAME.yaml
Richieste di corrispondenza
Una configurazione Media CDN contiene un insieme di route definiti nella sezione
Routing
per una risorsa
EdgeCacheService.
Questi percorsi corrispondono alle richieste in base ad almeno un host. Per ulteriori dettagli su come
il traffico viene indirizzato a un'origine, consulta
HostRule
e PathMatcher.
Ogni route è in grado di definire la propria configurazione CDN, riscritture, reindirizzamenti,
norme CORS, intestazioni HTTP personalizzate e mapping dell'origine.
Le route possono condividere le origini.
Ad esempio, puoi instradare le richieste di manifest a un'origine specifica e definire un TTL della cache di breve durata e una policy di memorizzazione nella cache negativa. Le richieste di segmenti possono essere suddivise in un'altra origine utilizzando intestazioni e parametri di query per separare tipi di manifest o utenti specifici.
L'esempio seguente mostra come instradare le richieste che corrispondono a un'intestazione, un parametro di query e un prefisso del percorso specifici per l'host media.example.com:
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
Corrispondenza percorso
Media CDN supporta la corrispondenza esatta, del prefisso e con caratteri jolly del percorso. La corrispondenza del percorso può essere combinata con la corrispondenza basata su host, intestazione e parametri di query per creare regole di routing delle richieste granulari.
Di seguito sono riportati tre modi per trovare una corrispondenza in un percorso URL.
| Campo | Descrizione | Esempio |
|---|---|---|
matchRules[].fullPathMatch
|
La condizione fullPathMatch corrisponde al percorso URL completo,
che non include la stringa di query. Devi specificare le barre
finali, se pertinenti.
|
Un percorso con una regola di corrispondenza Un |
matchRules[].prefixMatch
|
La condizione prefixMatch corrisponde al prefisso del percorso URL; gli URL
che iniziano con la stessa stringa corrispondono.
|
Un percorso con una regola di corrispondenza |
matchRules[].pathTemplateMatch
|
La condizione pathTemplateMatch supporta
operatori jolly, che ti consentono di trovare corrispondenze con pattern URL e segmenti di percorso complessi, nonché di acquisire variabili denominate per riscrivere gli URL.
|
Una route con una regola di corrispondenza di
Sia Per altri esempi, consulta la sezione Corrispondenza dei pattern. |
Per ulteriori dettagli, consulta la specifica dell'API per
MatchRule.
Ad esempio, per trovare corrispondenze con tutte le richieste che iniziano con /stream/, crea una regola di routing
simile alla seguente:
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/
Questo esempio include esplicitamente la barra finale nella regola di corrispondenza:
- Una richiesta a
media.example.com/stream/id/1234/hls/manifest.m3u8corrisponde a questo percorso. - Una richiesta di
media.example.com/stream-eu/id/4567/hls/manifest.m3u8non corrisponde a questo percorso.
Nel secondo caso, Media CDN restituisce un errore HTTP 404,
a meno che non sia stata configurata un'altra route o una route catch-all.
Per indicazioni su come funziona la precedenza per le route con prefissi simili, consulta la sezione Ordinamento e priorità route.
Corrispondenza (carattere jolly) di pattern
La corrispondenza dei pattern consente di abbinare più parti di un URL, compresi gli URL parziali e i suffissi (estensioni dei file), utilizzando la sintassi con caratteri jolly.
Puoi anche associare uno o più segmenti di percorso a variabili denominate in un campo pathTemplateMatch e poi fare riferimento a queste variabili quando riscrivi l'URL in un campo pathTemplateRewrite. In questo modo, puoi riordinare e rimuovere i segmenti URL prima che la richiesta venga inviata all'origine.
Il seguente esempio mostra come eseguire la corrispondenza con due suffissi URL diversi:
# EdgeCacheService.routing.pathMatchers[] routeRules: - priority: 1 description: "Match video segments" matchRules: - pathTemplateMatch: "/**.ts" - pathTemplateMatch: "/**.m4s" origin: prod-video-storage
La sintassi supportata include quanto segue.
| Operatore | Corrisponde a | Esempio |
|---|---|---|
*
|
Corrisponde a un singolo segmento di percorso, fino al successivo separatore di percorso: /
|
/videos/*/*/*.m4s corrisponde a
/videos/123414/hls/1080p5000_00001.m4s.
|
**
|
Corrisponde a zero o più segmenti di percorso. Se presente, deve essere l'ultimo operatore. |
/**.mpd corrisponde a
/content/123/india/dash/55/manifest.mpd.
|
{name} or {name=*}
|
Una variabile denominata che corrisponde a un segmento di percorso.
Corrisponde a un singolo segmento di percorso, fino al successivo separatore di percorso:
|
/content/{format}/{lang}/{id}/{file}.vtt corrispondenze
/content/hls/en-us/12345/en_193913.vtt e acquisizioni
format="hls", lang="en-us", id="12345",
e file="en_193913" come variabili.
|
{name=videos/*}
|
Una variabile denominata che corrisponde a più di un segmento di percorso. Il segmento del percorso
corrispondente a videos/* viene acquisito come variabile denominata.
|
/videos/{language=lang/*}/* corrisponde a
/videos/lang/en/video.m4s e compila la variabile di percorso
language con il valore lang/en.
|
{name=**}
|
Una variabile denominata che corrisponde a zero o più segmenti di percorso. Se presente, deve essere l'ultimo operatore. |
|
Note:
- Se non riscrivi un URL, utilizza gli operatori più semplici
*e**. - Quando utilizzi le variabili per acquisire segmenti di percorso, non è possibile fare riferimento a nessuna parte dell'URL che non viene acquisita da una variabile in un successivo
pathTemplateRewrite. Per un esempio, consulta la sezione Acquisizione delle variabili di percorso. - Non puoi fare riferimento a variabili in un
pathTemplateRewritesuccessivo che non esistono nelpathTemplateMatchsulla stessa route. - Le variabili sono sensibili alle maiuscole, con
{FORMAT},{forMAT}e{format}che rappresentano variabili e valori diversi. - Puoi specificare fino a 10 operatori (caratteri jolly o variabili) in una corrispondenza.
I campi
pathTemplateMatchepathTemplateRewritenon devono superare i 255 caratteri.
Esempio: corrispondenza in base a un'estensione di file
L'esempio seguente mostra un caso d'uso comune per gli operatori jolly: la corrispondenza di tutti i segmenti di percorso fino a un suffisso.
In questo caso, segui questi passaggi:
- Recupera i manifest dei video (playlist) che terminano con
.m3u8e.mpddall'origine del manifest, applicando un TTL breve (5 secondi) a queste risposte perché cambiano regolarmente. - Recupera i segmenti video che terminano con
.tse.m4sdall'origine del segmento e applica un TTL più lungo (1 giorno) a queste risposte.
Questo approccio viene spesso utilizzato quando si utilizzano servizi SSAI (Server-Side Ad Injection) o DAI (Dynamic Ad Insertion) e per i video live in cui il manifest viene aggiornato ogni pochi secondi.
La seguente configurazione mostra come configurare il routing di Media CDN per supportare questa funzionalità:
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
Esempio: acquisire le variabili di percorso
L'esempio seguente mostra come utilizzare le variabili denominate per descrivere uno o più segmenti di percorso.
Queste variabili possono essere utilizzate in un pathTemplateRewrite per riscrivere il percorso prima
che la richiesta venga inviata all'origine o per rendere un pathTemplateMatch complesso
autodescrittivo.
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}"
In particolare:
- Ogni variabile
{name}acquisisce un singolo segmento di percorso. Un segmento di percorso è costituito da tutti i caratteri tra una coppia di/("slash") in un percorso URL. - Una variabile di
{name=**}acquisisce tutti i segmenti di percorso rimanenti; in questo caso, corrisponde sia asegments/00001.tsche amaster.m3u8. - In
pathTemplateRewritesullo stesso percorso, fai riferimento ad alcune delle variabili acquisite inpathTemplateMatch. Ometti esplicitamente le variabili{country}e{lang}perché non corrispondono alla struttura delle directory nell'origine.
Con questo esempio, si verifica quanto segue:
- Un URL di richiesta in entrata di
/us/en/hls/123139139/segment_00001.tscorrisponde apathTemplateMatche viene riscritto in/123139139/hls/segment_00001.tsprima di essere inviato all'origine. - Un URL della richiesta in entrata
/us/123139139/master.m3u8non corrisponde apathTemplateMatche riceve un codice di stato HTTP404 (Not Found). - Un URL di richiesta in entrata di
/br/es/dash/c966cbbe6ae3/subtitle_00001.vttcorrisponde anche apathTemplateMatche viene riscritto in/c966cbbe6ae3/dash/subtitle_00001.vttprima di essere inviato all'origine.
Per scoprire di più su come funziona la corrispondenza con caratteri jolly con la riscrittura degli URL, consulta la sezione Riscrizioni.
Corrispondenza host
Ogni servizio può corrispondere a più nomi host e ogni insieme di nomi host contiene il proprio gruppo di route (noti come corrispondenze di percorso). Nel caso più comune, tutti i nomi host per un servizio vengono mappati a un singolo insieme di route condivise con un singolo elenco di host e una singola espressione di corrispondenza dei percorsi.
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
Gli host che non corrispondono mostrano una pagina HTTP 404 predefinita. Per accettare qualsiasi host,
puoi includere il carattere jolly * come voce hostRules[].hosts[].
Puoi anche definire gruppi di percorsi (ad esempio, raggruppamento per paese o live rispetto a on demand). Poiché ogni servizio ha un'unica policy di sicurezza, in genere consigliamo di avere un servizio per ogni mercato (area geografica) o carico di lavoro.
Note:
- Le intestazioni host (o HTTP/2
:authority) che contengono una porta vengono abbinate implicitamente a un host configurato. Non è necessario specificare esplicitamente le porte. - Se la richiesta avviene tramite HTTP, una voce
hostRules[].hosts[]di*.vod.example.comcorrisponde aus.vod.example.comeus.vod.example.com:80. - Se la richiesta avviene tramite HTTPS (TLS), una voce
hostRules[].hosts[]di*.vod.example.comcorrisponde aus.vod.example.com:443.
Per ulteriori dettagli, consulta la specifica dell'API per
HostRule.
Corrispondenza in base a intestazioni e parametri di ricerca
Puoi configurare le route in modo che corrispondano a nomi specifici di parametri di ricerca e intestazioni, nonché alla presenza di un valore di intestazione (prefisso, suffisso o corrispondenza esatta).
La corrispondenza tra parametri di query e intestazioni è logica "AND": la richiesta deve corrispondere a tutti iparametri di ricercay e alle chiavi di intestazione (e ai valori, se specificati) per corrispondere alla route specificata.
Ad esempio, se vuoi indirizzare le richieste con un nome di campo di intestazione e un valore di intestazione specifici a un'origine denominata alternate-origin, configura le condizioni di corrispondenza all'interno di 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 questo esempio, le richieste con /videos/ all'inizio dell'URL e l'intestazione
x-device-name: roku corrispondono a questa route. Le richieste in cui manca questo nome
dell'intestazione o con un valore diverso non corrispondono a questa route.
Per ulteriori dettagli, consulta la specifica dell'API per
HeaderMatch.
Analogamente, per la corrispondenza con parametri di ricerca, specifica uno o più
queryParameterMatches nel seguente modo:
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 questo esempio, una richiesta client di
https://cdn.example.com/videos/1234/abcd/xyz.m3u8?playback_type=live&geo=eu
corrisponde a questa route.
Per ulteriori dettagli, consulta la specifica dell'API per
QueryParameterMatcher.
Definisci una route catch-all (predefinita)
Per impostazione predefinita, Media CDN restituisce un errore HTTP 404 (Not Found) se una richiesta non corrisponde a nessuna route configurata.
Per configurare una route generica per un determinato pathMatcher (insieme di
route), procedi nel seguente modo:
- Crea un
routeRulecon la priorità più bassa (il numero più alto), ad esempio 999, che è la priorità di route più bassa possibile. - Configura un
matchRulecon una corrispondenza del prefisso di/(corrisponde a tutti i percorsi delle richieste). - Configura (uno dei) un
origino unurlRedirectsulla route.
Ad esempio, per configurare una route catch-all che indirizza tutte le richieste non corrispondenti
a un'origine predefinita denominata my-origin, crea una nuova route con priority: 999
e un matchRules[].prefixMatch di / come segue:
name: prod-service routing: hostRules: - hosts: - cdn.example.com pathMatcher: example_routes pathMatchers: - name: example_routes routeRules: - priority: 999 origin: my-origin matchRules: - prefixMatch: /
Puoi riscrivere l'URL prima del recupero dell'origine o reindirizzare a una pagina predefinita (ad esempio la pagina di destinazione) anziché inviare la richiesta "così com'è" all'origine.
Ordinamento e priorità route
Ogni percorso in un array di routeRules[] deve avere un priority associato.
Le route più specifiche devono essere impostate su una priorità più alta (numero più piccolo). Una
route che corrisponde a un prefisso di /stream/ con priorità 1 impedisce altrimenti a una
route più specifica di /stream/live/eu/ con priorità 5 di corrispondere a qualsiasi
richiesta.
- La route con priorità più alta è "1", mentre quella con priorità più bassa è "999".
- Non puoi configurare due o più routeRules con la stessa priorità. La priorità di ogni regola deve essere impostata su un numero compreso tra 1 e 999 inclusi.
- La definizione di una route catch-all ti consente di inviare tutte le richieste non corrispondenti a un'origine predefinita o di reindirizzarle a una pagina di destinazione o a un endpoint.
Nell'esempio seguente, puoi vedere che la route /live/us/ non verrà mai
corrisposta perché la route /live/ ha una priorità più alta:
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: /
Per risolvere il problema, assegna una priorità più alta alla route più specifica (più lunga):
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: /
In questo modo, la route più specifica può corrispondere correttamente alle richieste. Una richiesta
con il prefisso /live/eu/ verrà comunque indirizzata al percorso /live/ con
priorità 2.
Filtro del metodo
Per impostazione predefinita, Media CDN esegue il proxy solo dei metodi GET, HEAD e OPTIONS
all'origine e filtra i metodi che possono modificare l'origine.
Puoi ignorare questo comportamento predefinito per una regola di routing specifica specificando
i metodi per cui vuoi utilizzare il proxy per l'origine. Oltre a GET, HEAD e
OPTIONS, Media CDN supporta PUT, POST, DELETE e
PATCH.
Media CDN esegue nuovi tentativi o tentativi di failover solo per le richieste che utilizzano i metodi HTTP più sicuri, come GET, HEAD o OPTIONS.
Per configurare il supporto per un insieme di metodi per una regola di percorso, specifica una
sezione routeMethods con un valore allowed_methods per ogni metodo.
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
Normalizzazione del percorso
La normalizzazione del percorso descrive il modo in cui Media CDN combina più rappresentazioni di un URL in un'unica rappresentazione canonica in scenari specifici.
La normalizzazione del percorso può migliorare direttamente i tassi di successo della cache riducendo il numero di URL di richiesta che rappresentano lo stesso contenuto e mitigando gli errori di origine per le origini che prevedono percorsi normalizzati.
Le richieste in entrata vengono normalizzate come segue:
- Più barre consecutive vengono unite in un'unica barra. Ad esempio, un
percorso URL
/videos///12345/manifest.mpdviene normalizzato in/videos/12345/manifest.mpd. - I segmenti di percorso vengono normalizzati in base alla
sezione 6.2.2.3 dell'RFC 3986.
Ad esempio, il percorso
/a/b/c/./../../gviene normalizzato in/a/gin base all'algoritmo "remove dot segments" definito in RFC 3986. Questa normalizzazione avviene prima di controllare la cache o inoltrare la richiesta all'origine. - Le richieste non sono normalizzate con codifica percentuale. Ad esempio, un URL con un carattere
barra codificato in percentuale (
%2F) non viene decodificato nella forma non codificata.
Gli URL rimangono sensibili alle maiuscole e non vengono normalizzati. Molti URL contengono codifiche Base64 sensibili alle maiuscole, inclusi gli URL con token di richiesta firmata.
Riscritture e reindirizzamenti
Le sezioni seguenti forniscono esempi su come riscrivere le richieste e configurare i reindirizzamenti.
Riscrivere gli URL delle richieste
Media CDN supporta la riscrittura di host e percorsi. Le riscritture modificano l'URL inviato all'origine e ti consentono di modificare host e percorsi in base alle esigenze. Le riscritture di host e percorso sono a livello di route, il che ti consente di definire quali richieste specifiche vengono riscritte in base a qualsiasi matcher, inclusi percorso, parametro di query e intestazione della richiesta.
Per ulteriori dettagli, consulta la specifica dell'API per
RouteAction.UrlRewrite.
Di seguito sono riportati tre modi per riscrivere una richiesta:
| Campo | Descrizione |
|---|---|
urlRewrite.pathPrefixRewrite
|
Riscrive il percorso rimuovendo il prefisso specificato in
È possibile specificare un solo elemento ( |
urlRewrite.pathTemplateRewrite
|
È possibile specificare un solo elemento ( |
urlRewrite.hostRewrite
|
Riscrive l'host prima che la richiesta venga inviata al server di origine. |
Note:
- Gli URL riscritti non modificano la chiave della cache. La chiave della cache si basa sull'URL della richiesta inviata dal client.
- La riscrittura avviene dopo la corrispondenza delle route e la convalida delle richieste firmate. Le route non vengono corrispondenti a un'altra regola di corrispondenza.
Esempio: rimuovere un prefisso di percorso
Ad esempio, per riscrivere un URL di richiesta client da /vod/videos/hls/1234/abc.ts a
/videos/hls/1234/abc.ts (rimuovendo /vod dal percorso), puoi utilizzare la
funzionalità pathPrefixRewrite:
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/"
Un pathPrefixRewrite funziona sostituendo l'intero prefisso del percorso corrispondente in
matchRules[].prefixMatch con il valore di pathPrefixRewrite.
Per riscrivere un nome host (ad esempio, riscrivere cdn.example.com in
my-bucket.s3.us-west-2.amazonaws.com), puoi configurare quanto segue:
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 questo caso, l'URL della richiesta di origine cambierebbe da
cdn.example.com/videos/* a my-bucket.s3.us-west-2.amazonaws.com/videos/*.
Puoi anche combinare la riscrittura dell'host e del percorso in un'unica route.
Esempio: utilizzare le variabili per riscrivere gli URL
Per utilizzare pathTemplateMatch e pathTemplateRewrite per riscrivere parti di un URL
della richiesta in entrata, consulta la sezione Acquisizione di variabili.
Richieste di reindirizzamento
Media CDN supporta tre tipi di reindirizzamenti:
- Reindirizzamenti host, che reindirizzano solo l'host (dominio), mantenendo invariati il percorso e parametri di ricerca.
- Reindirizzamenti del percorso, che sostituiscono completamente il percorso.
- Reindirizzamenti del prefisso del percorso, che sostituiscono solo il prefisso corrispondente.
I reindirizzamenti sono impostati per impostazione predefinita su HTTP 301 (Moved Permanently), ma possono essere configurati per restituire codici di stato di reindirizzamento diversi in base alla route.
La seguente configurazione è un esempio di reindirizzamento basato sul prefisso,
in cui reindirizzi gli utenti che visitano https://cdn.example.com/on-demand/* a
https://cdn.example.com/streaming/*.
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
Questo esempio modifica anche il reindirizzamento in un reindirizzamento temporaneo, il che impedisce ai client (come i browser) di memorizzarlo nella cache. Questa opzione può essere utile se prevedi di modificarlo nel prossimo futuro.
I valori redirectResponseCode supportati sono riportati nella tabella seguente.
| Codice di risposta reindirizzamento | Codice di stato HTTP |
|---|---|
MOVED_PERMANENTLY_DEFAULT |
HTTP 301 (Spostato permanentemente) |
FOUND |
HTTP 302 (Trovato) |
SEE_OTHER |
HTTP 303 (Vedi altro) |
TEMPORARY_REDIRECT |
HTTP 307 (reindirizzamento temporaneo) |
PERMANENT_REDIRECT |
HTTP 308 (reindirizzamento permanente) |
Note:
- Una route può indirizzare il traffico a un'origine o restituire un reindirizzamento al client. Non puoi impostare contemporaneamente i campi
origineurlRedirect. - Le route che reindirizzano a HTTPS richiedono che almeno un certificato SSL sia collegato al servizio.
Per ulteriori dettagli, consulta la specifica dell'API per
RouteRule.UrlRedirect.
Reindirizzare tutte le richieste a HTTPS
Per reindirizzare tutte le richieste a HTTPS (anziché HTTP), puoi configurare ciascuno dei tuoi servizi in modo che reindirizzino automaticamente tutte le richieste client a HTTPS. I client
che si connettono tramite HTTP ricevono un codice di stato HTTP 301 (Permanent Redirect) con l'intestazione
Location impostata sullo stesso URL utilizzando "https://" anziché "http://".
gcloud
gcloud edge-cache services update MY_SERVICE \ --require-tls
Request issued for: [MY_SERVICE] Updated service [MY_SERVICE].
Il comando restituisce una descrizione del servizio, con requireTls ora impostato
su true.
name: MY_SERVICE requireTls: true
Puoi anche scegliere di impostare l'intestazione Strict-Transport-Security come intestazione di risposta per indirizzare i client a connettersi sempre direttamente tramite HTTPS.
Utilizzare backend di archiviazione di terze parti
Media CDN supporta la connessione a endpoint HTTP raggiungibili pubblicamente al di fuori di Google Cloud, inclusi i bucket di archiviazione AWS S3, Azure Blob Storage e altri provider di archiviazione. Ciò può essere utile se hai un'architettura multicloud o se devi ancora eseguire la migrazione dei dati a Cloud Storage utilizzando Storage Transfer Service.
Una configurazione dell'origine minima che configura un bucket ospitato virtualmente in AWS S3:
name: MY_S3_ORIGIN originAddress: BUCKET-NAME.s3.REGION.amazonaws.com
Se non utilizzi un nome bucket che corrisponda ai nomi host configurati per le tue risorse EdgeCacheService, devi anche configurare una riscrittura dell'host per le route associate a questa origine (o origini). In caso contrario, viene utilizzata l'intestazione Host impostata dalla
richiesta del client durante il recupero dall'origine.
Ad esempio, per mappare tutte le richieste con un prefisso di percorso /legacy/ al tuo bucket esterno, puoi configurare sia un hostRewrite sia un pathPrefixRewrite per rimuovere questo prefisso dalla richiesta di origine:
routeRules: - description: legacy backend matchRules: - prefixMatch: "/legacy/" routeAction: urlRewrite: hostRewrite: BUCKET-NAME.s3.REGION.amazonaws.com pathPrefixRewrite: / cdnPolicy: cacheMode: CACHE_ALL_STATIC defaultTtl: 3600s
Per saperne di più su come viene impostata l'intestazione host nelle richieste di origine, consulta la documentazione relativa alle intestazioni delle richieste di origine.
Condivisione delle risorse tra origini (CORS)
La condivisione delle risorse tra origini (CORS) è un approccio incentrato sul browser per effettuare in modo sicuro richieste tra origini.
Le policy CORS ti consentono di impostare automaticamente le intestazioni CORS, ad esempio
Access-Control-Allow-Origins, in base a una policy per route.
Configurare CORS
Media CDN consente di definire una policy CORS su una route per un
EdgeCacheService.
Un criterio CORS definisce queste regole con un insieme comune di intestazioni HTTP. Puoi
impostare intestazioni CORS comuni nelle risposte, ad esempio
Access-Control-Allow-Origin, Access-Control-Max-Age
e Access-Control-Allow-Headers. Queste intestazioni ti consentono di effettuare chiamate
cross-origin ai tuoi servizi Media CDN che potrebbero essere
ospitati su un dominio (origine) diverso dal frontend del tuo sito web e potrebbero
impedire le richieste cross-origin che non autorizzi esplicitamente.
Ad esempio, player.example.com e api.example.com sono origini diverse
(nel senso del browser) e potresti voler fare in modo che la tua applicazione frontend
invi richieste a api.example.com per recuperare la playlist successiva o aggiornare un
elenco di contenuti correlati. Allo stesso modo, player.example.com potrebbe dover
contattare cdn.example.com per recuperare le playlist e i segmenti video:
cdn.example.com deve indicare che è tutto a posto e che
player.example.com è un allowed origin, nonché qualsiasi altra regola
(intestazioni consentite, possibilità di includere i cookie).
Per fare un altro esempio, se vuoi consentire stream.example.com come origine
e un'intestazione X-Client-ID nelle richieste CORS, puoi configurare un corsPolicy su una
route, nel seguente modo:
corsPolicy: maxAge: 600 allowOrigins: ["stream.example.com"] allowHeaders: ["X-Client-ID"]
Un corsPolicy è configurato in
routing.pathMatchers[].routeRules[].routeAction.corsPolicy all'interno di un
EdgeCacheService. Ogni routeRule può definire un corsPolicy diverso in base alle esigenze o nessuno.
Se definisci un valore corsPolicy e imposti anche un'intestazione della risposta personalizzata utilizzando i campi responseHeadersToAdd in una route con lo stesso nome, l'intestazione della risposta personalizzata ha la precedenza e viene utilizzata al posto del valore corsPolicy.
Se la risposta di origine imposta le intestazioni HTTP e hai impostato un valore corsPolicy, vengono utilizzati i valori corsPolicy. I valori non vengono compressi
o combinati per evitare di inviare valori di intestazione non validi a un client o
di impostare involontariamente criteri più permissivi di quanto previsto.
La variabile speciale {origin_request_header} viene compilata con l'intestazione HTTP Origin
nella richiesta del client. Può essere impostato come valore dell'intestazione della risposta personalizzata in una
route, per l'intestazione Access-Control-Allow-Origin.
Per maggiori dettagli, consulta la specifica dell'API per
RouteAction.CORSPolicy.
Campi della policy CORS
La tabella seguente descrive i campi contenuti in una norma CORS.
| Campo | Descrizione | Esempio |
|---|---|---|
| allowOrigins |
Imposta l'intestazione della risposta
Ad esempio, se i tuoi contenuti video vengono pubblicati da
|
Access-Control-Allow-Origins: https://stream.example.com
|
| maxAge |
Imposta l'intestazione della risposta Alcuni browser limitano questo valore a 2 ore o meno, anche se è specificato il valore massimo (86.400 secondi). |
Access-Control-Max-Age: 7200
|
| allowMethods |
Imposta l'intestazione di risposta Per impostazione predefinita, Media CDN supporta solo i metodi |
Access-Control-Allow-Methods: GET, OPTIONS, HEAD
|
| allowHeaders |
Imposta l'intestazione Questo è spesso richiesto dai video player, che devono accedere ad alcune intestazioni di risposta per i contenuti video quando li richiedono tra origini diverse. |
Access-Control-Allow-Headers: Content-Type, If-Modified-Since,
Range, User-Agent
|
| exposeHeaders |
Imposta l'intestazione della risposta Questo è spesso richiesto dai lettori video, che potrebbero dover accedere a intestazioni di risposta specifiche per i contenuti video quando richiedono contenuti cross-origin. |
Access-Control-Expose-Headers: Date, Cache-Status, Content-Type,
Content-Length
|
| allowCredentials |
Imposta l'intestazione della risposta Questa intestazione viene omessa se impostata su false. |
Access-Control-Allow-Credentials: true
|
| disabled |
Disattiva corsPolicy senza rimuoverlo. Le richieste
OPTIONS pre-volo vengono inviate tramite proxy all'origine.
|
N/D |
Esempio di corsPolicy
Il seguente esempio di configurazione mostra una configurazione corsPolicy di base:
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"
Risolvere i problemi di routing
Se alcune richieste non recuperano risultati corrispondenti o restituiscono errori, controlla quanto segue:
- Un percorso deve avere un
matchRulecon esattamente uno dei valoriprefixMatch,fullPathMatchopathTemplateMatchdefinito. L'API restituisce un errore se non includi uno di questi campi. - Assicurati che il
prioritydi ogni route sia impostato correttamente: alle route più specifiche (più lunghe) deve essere assegnata una priorità più alta rispetto alle corrispondenze di route più brevi e più ampie. - Per impostazione predefinita, sono supportate solo le richieste
GET,HEADeOPTIONS. Per configurare il supporto per altri metodi, vedi Metodi di routing. I metodi non abilitati per una determinata route vengono rifiutati con un errore HTTP405 (Method Not Allowed). - Le richieste HTTP
GETcon un corpo o qualsiasi richiesta con trailer vengono rifiutate con un errore HTTP400, perché i corpi delle richieste non sono consentiti nelle richiesteGET. - La corrispondenza di parametri di query e intestazioni è logica "AND": la richiesta deve corrispondere a tutte le chiavi (e i valori, se specificati) dei parametri di query o delle intestazioni per corrispondere alla route specificata.
Passaggi successivi
- Consulta la documentazione sulla configurazione della memorizzazione nella cache.
- Scopri come connetterti a origini diverse.
- Configura i certificati TLS (SSL) per il tuo servizio.
- Configura le richieste firmate per autenticare l'accesso ai contenuti.
- Per maggiori dettagli sulla configurazione delle risorse
EdgeCacheServiceutilizzando Terraform, consulta la documentazione del registro Terraform.