Media CDN menyediakan kemampuan pemilihan rute HTTP tingkat lanjut yang memungkinkan untuk memetakan traffic ke konfigurasi dan origin edge tertentu dengan level organisasi.
Permintaan pencocokan
Konfigurasi Media CDN berisi serangkaian rute yang ditentukan dalam
Pemilihan Rute
untuk
EdgeCacheService
resource Anda
Rute ini cocok dengan permintaan berdasarkan (setidaknya) host. Untuk detail selengkapnya tentang cara
traffic diarahkan ke origin, lihat
HostRule
dan PathMatcher
.
Setiap rute dapat menentukan konfigurasi, penulisan ulang, pengalihan, dan
Kebijakan CORS, header HTTP kustom, dan pemetaan origin.
Rute dapat berbagi origin.
Misalnya, Anda bisa merutekan permintaan manifes ke asal tertentu dan tentukan TTL cache berumur pendek dan kebijakan penyimpanan dalam cache negatif. Permintaan segmen dapat dibagi ke origin lain menggunakan header dan parameter kueri untuk mengelompokkan jenis manifes atau pengguna tertentu.
Contoh berikut menunjukkan cara mengarahkan permintaan yang cocok dengan header tertentu,
parameter kueri, dan awalan jalur untuk 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
Pencocokan jalur
Media CDN mendukung pencocokan jalur penuh (persis), awalan, dan karakter pengganti. Pencocokan jalur dapat digabungkan dengan opsi berbasis host, header, dan parameter kueri pencocokan untuk membuat aturan perutean permintaan yang sangat terperinci.
Berikut adalah tiga cara untuk mencocokkan jalur URL.
Kolom | Deskripsi | Contoh |
---|---|---|
matchRules[].fullPathMatch
|
Kondisi fullPathMatch cocok dengan jalur URL lengkap,
yang tidak berisi
string kueri. Anda harus menentukan akhir
garis miring, jika
relevan.
|
Rute dengan aturan kecocokan
|
matchRules[].prefixMatch
|
Kondisi prefixMatch cocok dengan awalan jalur URL; URL
yang dimulai dengan pencocokan
{i>string<i} yang sama.
|
Rute dengan aturan kecocokan |
matchRules[].pathTemplateMatch
|
Kondisi pathTemplateMatch mendukung
operator karakter pengganti, yang memungkinkan Anda mencocokkan pola dan jalur URL yang kompleks
segmen, serta menangkap variabel bernama untuk menulis ulang URL.
|
Rute dengan aturan kecocokan
Untuk contoh lainnya, lihat pencocokan pola. |
Untuk detail selengkapnya, lihat spesifikasi API untuk
MatchRule
Misalnya, untuk mencocokkan semua permintaan yang dimulai dengan /stream/
, buat aturan rute
mirip dengan contoh berikut ini:
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/
Contoh ini secara eksplisit menyertakan garis miring di akhir aturan pencocokan:
- Permintaan ke
media.example.com/stream/id/1234/hls/manifest.m3u8
kecocokan rute ini. - Permintaan ke
media.example.com/stream-eu/id/4567/hls/manifest.m3u8
melakukan tidak cocok dengan rute ini.
Dalam kasus kedua, Media CDN menampilkan error 404
HTTP,
kecuali jika ada rute lain atau rute umum
dikonfigurasi.
Untuk panduan tentang cara kerja predecensi untuk rute dengan awalan serupa, lihat bagian prioritas dan pengurutan rute.
Pencocokan pola (karakter pengganti)
Pencocokan pola memungkinkan Anda mencocokkan beberapa bagian URL, termasuk sebagian URL dan akhiran (ekstensi file), dengan menggunakan sintaks karakter pengganti.
Anda juga bisa mengaitkan satu atau beberapa komponen jalur dengan variabel bernama dalam
pathTemplateMatch
, lalu merujuk ke variabel tersebut saat menulis ulang URL di
kolom pathTemplateRewrite
. Hal ini memungkinkan Anda menyusun ulang dan menghapus komponen URL sebelum
permintaan dikirim ke origin Anda.
Contoh berikut menunjukkan cara mencocokkan dua akhiran URL yang berbeda:
# EdgeCacheService.routing.pathMatchers[] routeRules: - priority: 1 description: "Match video segments" matchRules: - pathTemplateMatch: "/**.ts" - pathTemplateMatch: "/**.m4s" origin: prod-video-storage
Sintaksis yang didukung mencakup hal berikut.
Operator | Mencocokkan dengan | Contoh |
---|---|---|
*
|
Mencocokkan komponen jalur tunggal, hingga pemisah jalur berikutnya: /
|
/videos/*/*/*.m4s kecocokan
/videos/123414/hls/1080p5000_00001.m4s .
|
**
|
Cocok dengan nol segmen jalur atau lebih. Jika ada, harus menjadi operator terakhir. |
/**.mpd kecocokan
/content/123/india/dash/55/manifest.mpd .
|
{name} or {name=*}
|
Variabel bernama yang cocok dengan satu segmen jalur.
Mencocokkan komponen jalur tunggal, hingga pemisah jalur berikutnya:
|
/content/{format}/{lang}/{id}/{file}.vtt kecocokan
/content/hls/en-us/12345/en_193913.vtt dan mengambil
format="hls" , lang="en-us" , id="12345" ,
dan file="en_193913" sebagai variabel.
|
{name=videos/*}
|
Variabel bernama yang cocok dengan lebih dari satu segmen jalur. Komponen jalur
yang cocok dengan videos/* diambil sebagai variabel bernama.
|
/videos/{language=lang/*}/* kecocokan
/videos/lang/en/video.m4s dan mengisi variabel jalur
language dengan nilai lang/en .
|
{name=**}
|
Variabel bernama yang cocok dengan nol segmen jalur atau lebih. Jika ada, harus menjadi operator terakhir. |
|
Catatan:
- Jika Anda tidak menulis ulang URL, gunakan operator
*
dan**
yang lebih sederhana. - Saat menggunakan variabel untuk mengambil
komponen jalur, setiap bagian URL yang
tidak ditangkap oleh variabel tidak dapat dirujuk dalam langkah berikutnya
pathTemplateRewrite
. Misalnya, lihat menangkap variabel jalur. - Anda tidak dapat merujuk ke variabel dalam
pathTemplateRewrite
berikutnya yang tidak ada dipathTemplateMatch
pada rute yang sama. - Variabel peka huruf besar/kecil, dengan
{FORMAT}
,{forMAT}
, dan{format}
yang merepresentasikan variabel dan nilai yang berbeda. - Anda dapat menentukan hingga 10 operator (karakter pengganti atau variabel) dalam satu pencocokan.
Kolom
pathTemplateMatch
danpathTemplateRewrite
tidak boleh lebih dari 255 karakter.
Contoh: Mencocokkan ekstensi file
Contoh berikut menunjukkan kasus penggunaan umum untuk operator karakter pengganti: pencocokan semua komponen jalur sampai sebuah akhiran.
Dalam kasus ini, lakukan tindakan berikut:
- Ambil manifes video (playlist) yang berakhiran
.m3u8
dan.mpd
dari dari manifes, menerapkan TTL singkat (5 detik) untuk respons ini karena mereka berubah secara teratur. - Ambil segmen video yang diakhiri dengan
.ts
dan.m4s
dari asal segmen, dan menerapkan TTL yang lebih lama (1 hari) untuk respons tersebut.
Pendekatan ini sering diterapkan saat menggunakan SSAI (Server-Side Ad Injection) atau Layanan DAI (Penyisipan Iklan Dinamis), dan untuk video live yang manifesnya diperbarui setiap beberapa detik.
Konfigurasi berikut menunjukkan cara mengonfigurasi Perutean Media CDN untuk mendukung ini:
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
Contoh: Mengambil variabel jalur
Contoh berikut menunjukkan cara menggunakan variabel bernama untuk mendeskripsikan satu atau lebih komponen jalur.
Variabel ini dapat digunakan dalam pathTemplateRewrite
untuk menulis ulang jalur sebelumnya
ke permintaan yang dikirim ke origin, atau untuk membuat
pathTemplateMatch
mendeskripsikan diri.
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}"
Secara khusus:
- Setiap variabel
{name}
menangkap satu segmen jalur. Segmen jalur adalah semua karakter di antara pasangan/
("garis miring") di jalur URL. - Variabel
{name=**}
menangkap semua segmen jalur yang tersisa; dalam yang cocok dengansegments/00001.ts
danmaster.m3u8
. - Di
pathTemplateRewrite
pada rute yang sama, Anda merujuk kembali ke beberapa variabel yang Anda ambil dalampathTemplateMatch
. Anda secara eksplisit hapus variabel{country}
dan{lang}
karena tidak cocok dengan struktur direktori pada origin.
Dengan contoh ini, hal berikut akan terjadi:
- URL permintaan masuk
/us/en/hls/123139139/segment_00001.ts
yang cocokpathTemplateMatch
dan ditulis ulang menjadi/123139139/hls/segment_00001.ts
sebelum dikirim ke asal. - URL permintaan masuk
/us/123139139/master.m3u8
tidak cocok denganpathTemplateMatch
, dan menerima respons404 (Not Found)
HTTP. - URL permintaan masuk
/br/es/dash/c966cbbe6ae3/subtitle_00001.vtt
juga cocok denganpathTemplateMatch
dan ditulis ulang menjadi/c966cbbe6ae3/dash/subtitle_00001.vtt
sebelum dikirim ke asal.
Untuk mempelajari lebih lanjut cara pencocokan karakter pengganti memiliki interoperabilitas dengan penulisan ulang URL, lihat bagian rewrites.
Pencocokan host
Setiap layanan bisa dicocokkan pada beberapa nama {i>host<i}, dengan setiap kumpulan nama {i>host<i} berisi kelompok rutenya sendiri (dikenal sebagai pencocok jalur). Dalam kasus yang paling umum, semua nama host untuk peta layanan ke satu kumpulan rute bersama dengan satu daftar {i>host<i} dan satu pencocok jalur.
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
Host yang tidak cocok akan melihat halaman 404
HTTP default. Untuk menerima {i>host<i},
Anda dapat menyertakan karakter pengganti *
sebagai entri hostRules[].hosts[]
.
Anda juga dapat menentukan grup rute (misalnya, mengelompokkan menurut negara atau langsung versus sesuai permintaan). Karena setiap layanan memiliki satu kebijakan keamanan, kami umumnya merekomendasikan memiliki satu layanan untuk setiap pasar (geografi) atau beban kerja yang Anda miliki.
Catatan:
- Header host (atau HTTP/2
:authority
) yang berisi port secara implisit cocok dengan {i>host<i} yang dikonfigurasi. Anda tidak perlu secara eksplisit menentukan porta. - Jika permintaan melalui HTTP, entri
hostRules[].hosts[]
dari*.vod.example.com
cocok denganus.vod.example.com
danus.vod.example.com:80
. - Jika permintaan melalui HTTPS (TLS), entri
hostRules[].hosts[]
dari*.vod.example.com
cocok denganus.vod.example.com:443
.
Untuk detail selengkapnya, lihat spesifikasi API untuk
HostRule
Mencocokkan header dan parameter kueri
Anda dapat mengonfigurasi rute agar cocok dengan nama parameter kueri dan header tertentu, serta adanya nilai header (awalan, akhiran, atau pencocokan persis).
Pencocokan header dan parameter kueri adalah "AND" yang logis—permintaan harus cocok semua parameter kueri dan kunci header (serta nilai, jika ditentukan) agar cocok rute yang diberikan.
Misalnya, jika Anda ingin mengarahkan permintaan
dengan nama bidang {i>header<i} tertentu dan
nilai header ke origin bernama alternate-origin
, konfigurasikan pencocokan Anda
kondisi dalam 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"
Dalam contoh ini, permintaan dengan /videos/
di awal URL dan
Header x-device-name: roku
cocok dengan rute ini. Permintaan tidak memiliki header ini
atau dengan nilai berbeda yang
tidak cocok dengan rute ini.
Untuk detail selengkapnya, lihat spesifikasi API untuk
HeaderMatch
Demikian pula, untuk mencocokkan dengan parameter kueri, tentukan satu atau beberapa
queryParameterMatches
sebagai berikut:
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"
Dalam contoh ini, permintaan klien sebesar
https://cdn.example.com/videos/1234/abcd/xyz.m3u8?playback_type=live&geo=eu
cocok dengan rute ini.
Untuk detail selengkapnya, lihat spesifikasi API untuk
QueryParameterMatcher
Menentukan rute generik (default)
Secara default, Media CDN menampilkan error 404 (Not Found)
HTTP jika ada permintaan
tidak cocok dengan rute
yang dikonfigurasi.
Untuk mengonfigurasi rute penampung, untuk pathMatcher
tertentu (kumpulan
rute lain), lakukan tindakan berikut:
- Buat
routeRule
dengan prioritas terendah (angka tertinggi)—misalnya, 999, yang merupakan prioritas rute serendah mungkin. - Mengonfigurasi
matchRule
dengan pencocokan awalan/
(cocok dengan semua permintaan ). - Mengonfigurasi (salah satu dari)
origin
atauurlRedirect
pada rute.
Misalnya, untuk mengonfigurasi rute generik yang mengarahkan semua permintaan yang tidak cocok
ke origin default bernama my-origin
, buat rute baru dengan priority: 999
dan matchRules[].prefixMatch
dari /
sebagai berikut:
name: prod-service routing: hostRules: - hosts: - cdn.example.com pathMatcher: example_routes pathMatchers: - name: example_routes routeRules: - priority: 999 origin: my-origin matchRules: - prefixMatch: /
Anda dapat menulis ulang URL sebelum pengambilan asal, atau mengalihkan ke halaman default Anda (seperti halaman landing), bukan mengirim permintaan "sebagaimana adanya" ke origin.
Prioritas dan pengurutan rute
Setiap rute dalam array routeRules[]
harus memiliki priority
yang terkait dengan
anotasi.
Rute yang lebih spesifik harus ditetapkan ke prioritas yang lebih tinggi (angka yang lebih kecil). J
rute yang cocok dengan awalan /stream/
dengan prioritas 1, sebaliknya akan mencegah
rute yang lebih spesifik /stream/live/eu/
dengan prioritas 5 agar tidak cocok dengan
permintaan.
- Rute prioritas tertinggi adalah "1", dan terendah adalah "999".
- Anda tidak dapat mengonfigurasi dua atau beberapa routeRules dengan prioritas yang sama. Prioritas untuk setiap aturan harus ditetapkan ke angka antara 1 dan 999 inklusif.
- Menentukan rute generik memungkinkan Anda mengirim semua permintaan yang tidak cocok ke asal default atau pengalihan mereka ke halaman landing atau endpoint.
Pada contoh berikut, Anda dapat melihat bahwa rute /live/us/
tidak akan pernah
cocok karena rute /live/
memiliki prioritas yang lebih tinggi:
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: /
Untuk mengatasinya, Anda menempatkan rute yang lebih spesifik (lebih panjang) pada prioritas yang lebih tinggi:
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: /
Hal ini memungkinkan rute yang lebih spesifik untuk mencocokkan permintaan dengan benar. Permintaan
diawali dengan /live/eu/
akan tetap melewati rute /live/
pada
prioritas 2.
Pemfilteran metode
Secara default, Media CDN hanya melakukan proxy GET
, HEAD
, dan OPTIONS
ke origin Anda dan memfilter metode yang dapat memodifikasi origin Anda.
Dalam Pratinjau, Anda dapat mengganti default ini
untuk aturan rute tertentu dengan menentukan metode yang akan
seperti {i>proxy<i} ke asal Anda. Selain GET
, HEAD
, dan OPTIONS
,
Media CDN mendukung PUT
, POST
, DELETE
, dan PATCH
.
Untuk mengonfigurasi dukungan bagi serangkaian metode untuk aturan rute, tentukan
Bagian routeMethods
yang memiliki nilai allowed_methods
untuk setiap metode.
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
Dalam Pratinjau, Media CDN memungkinkan pembaruan dan penayangan
konfigurasi Google Cloud dengan menggunakan v1alpha1 Network Services API.
Atau, Anda dapat menggunakan perintah gcloud alpha edge-cache services export
dan perintah gcloud alpha edge-cache services import
untuk memperbarui file YAML konfigurasi layanan.
Normalisasi jalur
Normalisasi jalur menjelaskan cara Media CDN menggabungkan beberapa representasi URL menjadi satu representasi kanonik di bagian yang signifikan.
Normalisasi jalur dapat secara langsung meningkatkan rasio cache ditemukan dengan mengurangi jumlah URL permintaan yang mewakili konten yang sama, dan dengan mengurangi error origin untuk origin yang mengharapkan jalur yang dinormalisasi.
Permintaan masuk dinormalkan sesuai dengan hal berikut:
- Beberapa garis miring berturut-turut digabungkan menjadi satu garis miring. Sebagai contoh,
Jalur URL
/videos///12345/manifest.mpd
dinormalisasi menjadi/videos/12345/manifest.mpd
. - Segmen jalur dinormalisasi sesuai dengan
RFC 3986 Bagian 6.2.2.3.
Misalnya, jalur
/a/b/c/./../../g
dinormalisasi ke/a/g
berdasarkan tindakan "hapus segmen titik" yang ditentukan dalam RFC 3986. Normalisasi ini terjadi sebelum pemeriksaan cache atau meneruskan permintaan ke server asal. - Permintaan tidak encoding persen dinormalisasi. Misalnya, URL dengan
karakter garis miring yang dienkode dengan persen (
%2F
) tidak didekode ke dalam format yang formulir.
URL tetap peka huruf besar/kecil dan tidak dinormalisasi huruf besar/kecil. Banyak URL berisi encoding base64 yang peka huruf besar/kecil, termasuk URL dengan token permintaan bertanda tangan.
Penulisan ulang dan pengalihan
Bagian berikut memberikan contoh tentang cara menulis ulang permintaan dan mengonfigurasi pengalihan.
Menulis ulang URL permintaan
Media CDN mendukung penulisan ulang host dan jalur. Penulisan ulang mengubah URL dikirim ke origin dan memungkinkan Anda mengubah host dan jalur sesuai kebutuhan. {i>Host<i} dan penulisan ulang jalur berada di tingkat rute, memungkinkan Anda menentukan permintaan ditulis ulang berdasarkan matcher apa pun, termasuk jalur, parameter kueri, dan permintaan {i>header<i}.
Untuk detail selengkapnya, lihat spesifikasi API untuk
RouteAction.UrlRewrite
Berikut adalah tiga cara untuk menulis ulang permintaan:
Kolom | Deskripsi |
---|---|
urlRewrite.pathPrefixRewrite
|
Menulis ulang jalur, menghapus awalan yang ditentukan dalam
Hanya satu dari |
urlRewrite.pathTemplateRewrite
|
Hanya satu dari |
urlRewrite.hostRewrite
|
Menulis ulang host sebelum permintaan dikirim ke server asal. |
Catatan:
- URL yang ditulis ulang tidak mengubah kunci cache. Kunci cache didasarkan pada URL permintaan yang dikirim oleh klien.
- Penulisan ulang terjadi setelah pencocokan rute dan validasi permintaan yang ditandatangani. Rute tidak dicocokkan ulang dengan aturan pencocokan lain.
Contoh: Menghapus awalan jalur
Misalnya, untuk menulis ulang URL permintaan klien dari /vod/videos/hls/1234/abc.ts
menjadi
/videos/hls/1234/abc.ts
(menghapus /vod
dari jalur), Anda dapat menggunakan
Fitur 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/"
pathPrefixRewrite
berfungsi dengan mengganti seluruh komponen jalur yang cocok dengan
matchRules[].prefixMatch
dengan nilai pathPrefixRewrite
.
Untuk menulis ulang nama host (misalnya, menulis ulang cdn.example.com
menjadi
my-bucket.s3.us-west-2.amazonaws.com
), Anda dapat mengonfigurasi hal berikut:
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"
Dalam hal ini, URL permintaan origin akan berubah dari
cdn.example.com/videos/*
hingga my-bucket.s3.us-west-2.amazonaws.com/videos/*
.
Anda juga dapat menggabungkan penulisan ulang host dan jalur dalam satu rute.
Contoh: Menggunakan variabel untuk menulis ulang URL
Untuk menggunakan pathTemplateMatch
dan pathTemplateRewrite
guna menulis ulang bagian dari
URL permintaan masuk, lihat variabel tangkapan
bagian.
Permintaan pengalihan
Media CDN mendukung tiga jenis pengalihan:
- Pengalihan host, yang hanya mengalihkan host (domain), yang mempertahankan jalur dan parameter kueri tidak berubah.
- Pengalihan jalur, yang menggantikan jalur sepenuhnya.
- Pengalihan awalan jalur, yang hanya menggantikan awalan yang cocok.
Pengalihan default ke HTTP 301 (Moved Permanently)
, tetapi dapat dikonfigurasi ke
menampilkan kode status pengalihan yang berbeda
berdasarkan setiap rute.
Konfigurasi berikut adalah contoh pengalihan berbasis awalan,
tempat Anda mengalihkan pengguna yang mengunjungi https://cdn.example.com/on-demand/*
ke
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
Contoh ini juga mengubah pengalihan ke pengalihan sementara, yang mencegah klien Anda (seperti browser) ke dalam cache. Hal ini dapat berguna jika Anda berharap untuk mengubahnya dalam waktu dekat.
Nilai redirectResponseCode
yang didukung ditampilkan dalam tabel berikut.
Kode respons pengalihan | Kode status HTTP |
---|---|
MOVED_PERMANENTLY_DEFAULT |
HTTP 301 (Dipindahkan Secara Permanen) |
FOUND |
HTTP 302 (Ditemukan) |
SEE_OTHER |
HTTP 303 (Lihat Lainnya) |
TEMPORARY_REDIRECT |
HTTP 307 (Pengalihan Sementara) |
PERMANENT_REDIRECT |
HTTP 308 (Pengalihan Permanen) |
Catatan:
- Rute dapat mengarahkan lalu lintas ke tempat asal atau mengembalikan pengalihan ke
dengan klien besar. Anda tidak dapat menetapkan
origin
danurlRedirect
sekaligus {i>field<i} secara bersamaan. - Rute yang mengalihkan ke HTTPS memerlukan minimal satu Sertifikat SSL dilampirkan ke layanan.
Untuk detail selengkapnya, lihat spesifikasi API untuk
RouteRule.UrlRedirect
Mengalihkan semua permintaan ke HTTPS
Untuk mengalihkan semua permintaan ke HTTPS (bukan HTTP), Anda dapat mengonfigurasi setiap
layanan Anda untuk mengalihkan semua
permintaan klien ke HTTPS secara otomatis. Klien
yang terhubung melalui HTTP akan dikirimi respons 301 (Permanent Redirect)
HTTP dengan
Header Location
ditetapkan ke URL yang sama dengan menggunakan "https://" bukan "http://".
gcloud
gcloud edge-cache services update MY_SERVICE \ --require-tls
Request issued for: [MY_SERVICE] Updated service [MY_SERVICE].
Perintah tersebut menampilkan deskripsi layanan Anda, dengan requireTls
sekarang ditetapkan
ke true
.
name: MY_SERVICE requireTls: true
Anda juga dapat memilih untuk menyetel Strict-Transport-Security sebagai header respons untuk mengarahkan klien agar selalu terhubung langsung melalui dengan HTTPS.
Menggunakan backend penyimpanan pihak ketiga
Media CDN mendukung koneksi ke HTTP yang dapat dijangkau secara publik endpoint di luar Google Cloud, termasuk bucket penyimpanan AWS S3, Azure Blob Storage, dan penyedia penyimpanan lainnya. Hal ini dapat berguna jika Anda memiliki arsitektur multicloud, atau belum memigrasikan data ke Cloud Storage menggunakan Storage Transfer Service.
Konfigurasi origin minimal yang mengonfigurasi bucket yang dihosting secara virtual di AWS S3:
name: MY_S3_ORIGIN originAddress: BUCKET-NAME.s3.REGION.amazonaws.com
Jika Anda tidak menggunakan nama bucket yang cocok dengan nama host yang dikonfigurasi untuk
EdgeCacheService
resource, Anda juga harus mengonfigurasi penulisan ulang host untuk rute
yang terkait dengan origin (atau origin) ini. Jika tidak, header Host yang ditetapkan oleh
permintaan klien digunakan saat mengambil data dari origin.
Misalnya, untuk memetakan semua permintaan dengan awalan jalur /legacy/
ke
bucket eksternal, Anda dapat mengonfigurasi hostRewrite
dan bucket
pathPrefixRewrite
untuk menghapus awalan ini dari permintaan origin:
routeRules: - description: legacy backend matchRules: - prefixMatch: "/legacy/" routeAction: urlRewrite: hostRewrite: BUCKET-NAME.s3.REGION.amazonaws.com pathPrefixRewrite: / cdnPolicy: cacheMode: CACHE_ALL_STATIC defaultTtl: 3600s
Untuk informasi selengkapnya tentang cara header host ditetapkan pada permintaan origin, lihat header permintaan origin dokumentasi layanan.
Cross-Origin Resource Sharing (CORS)
Cross-Origin Resource Sharing (CORS)
(CORS) adalah pendekatan yang berpusat pada browser untuk membuat permintaan lintas asal dengan aman.
Dengan kebijakan CORS, Anda dapat menetapkan header CORS secara otomatis, seperti
Access-Control-Allow-Origins
, berdasarkan kebijakan per rute.
Konfigurasi CORS
Media CDN memungkinkan Anda menentukan kebijakan CORS pada rute untuk
EdgeCacheService
Kebijakan CORS menentukan aturan ini dengan kumpulan header HTTP yang umum. Anda dapat
menetapkan header CORS umum dalam respons, seperti
Access-Control-Allow-Origin
, Access-Control-Max-Age
,
dan Access-Control-Allow-Headers
. {i>Header<i} ini memungkinkan Anda membuat
panggilan lintas origin ke layanan Media CDN yang mungkin
dihosting di domain (asal) yang berbeda dari frontend situs Anda dan mungkin
mencegah permintaan lintas asal yang tidak Anda izinkan secara eksplisit.
Misalnya, player.example.com
dan api.example.com
adalah origin yang berbeda
(dalam konteks browser), dan Anda mungkin ingin memiliki aplikasi frontend
membuat permintaan ke api.example.com
untuk mengambil playlist berikutnya atau memuat ulang
listingan konten terkait. Demikian pula, player.example.com
mungkin perlu
hubungi cdn.example.com
untuk mengambil playlist video dan segmen video:
cdn.example.com
perlu menunjukkan bahwa ini tidak masalah, dan bahwa
player.example.com
adalah allowed origin
, serta aturan lainnya
(header yang diizinkan, apakah cookie dapat disertakan).
Contoh lain, jika Anda ingin mengizinkan stream.example.com
sebagai origin
dan header X-Client-ID
dalam permintaan CORS, Anda dapat mengonfigurasi corsPolicy
pada
, sebagai berikut:
corsPolicy: maxAge: 600 allowOrigins: ["stream.example.com"] allowHeaders: ["X-Client-ID"]
corsPolicy
dikonfigurasi di
routing.pathMatchers[].routeRules[].routeAction.corsPolicy
dalam
EdgeCacheService. Setiap routeRule
dapat menentukan corsPolicy
yang berbeda sebagai
atau tidak sama sekali.
Jika Anda menentukan nilai corsPolicy
dan juga menetapkan header respons kustom dengan
menggunakan kolom responseHeadersToAdd
pada rute dengan nama yang sama,
header respons kustom akan diprioritaskan, dan digunakan sebagai pengganti,
Nilai corsPolicy
.
Jika respons origin menetapkan header HTTP, dan Anda memiliki nilai corsPolicy
ditetapkan, nilai corsPolicy
akan digunakan sebagai gantinya. Nilai tidak diciutkan
atau dikombinasikan untuk menghindari pengiriman nilai header yang tidak valid ke klien, atau
secara tidak sengaja membuat kebijakan
yang lebih permisif dari yang dimaksudkan.
{origin_request_header}
khusus diisi dengan header HTTP Origin
dalam permintaan klien. Ini dapat ditetapkan sebagai nilai header respons kustom pada
rute, untuk header Access-Control-Allow-Origin
.
Untuk detail selengkapnya, lihat API
spesifikasi untuk
RouteAction.CORSPolicy
Kolom kebijakan CORS
Tabel berikut menjelaskan kolom yang terdapat dalam kebijakan CORS.
Kolom | Deskripsi | Contoh |
---|---|---|
allowOrigins |
Menetapkan header respons
Misalnya, jika konten video Anda ditayangkan dari
|
Access-Control-Allow-Origins: https://stream.example.com
|
maxAge |
Menetapkan header respons Beberapa {i>browser<i} membatasi waktu ini hingga 2 jam atau kurang, bahkan jika nilai maksimum (86400s) ditentukan. |
Access-Control-Max-Age: 7200
|
allowMethods |
Menetapkan header respons Secara default, Media CDN hanya mendukung |
Access-Control-Allow-Methods: GET, OPTIONS, HEAD
|
allowHeaders |
Menetapkan header Hal ini sering kali diperlukan oleh pemutar video, yang perlu mengakses beberapa header respons untuk konten video saat memintanya lintas origin. |
Access-Control-Allow-Headers: Content-Type, If-Modified-Since,
Range, User-Agent
|
exposeHeaders |
Menetapkan header respons Hal ini sering kali diperlukan oleh pemutar video, yang mungkin perlu mengakses header respons spesifik untuk konten video saat meminta konten lintas origin. |
Access-Control-Expose-Headers: Date, Cache-Status, Content-Type,
Content-Length
|
allowCredentials |
Menetapkan header respons Header ini dihilangkan jika ditetapkan ke false. |
Access-Control-Allow-Credentials: true
|
disabled |
Menonaktifkan corsPolicy tanpa menghapusnya. Sebelum penerbangan
Permintaan OPTIONS di-proxy-kan ke asal.
|
T/A |
Contoh corsPolicy
Contoh konfigurasi berikut menunjukkan konfigurasi corsPolicy
dasar:
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"
Memecahkan masalah pemilihan rute
Jika beberapa permintaan tidak mengambil hasil yang cocok atau menampilkan kesalahan, periksa berikut ini:
- Rute harus memiliki
matchRule
dengan tepat satuprefixMatch
,fullPathMatch
, ataupathTemplateMatch
ditentukan. API akan menampilkan error jika maka Anda tidak menyertakan salah satu {i>field <i}tersebut. - Pastikan
priority
untuk setiap rute ditetapkan dengan benar: lebih spesifik rute (yang lebih panjang) harus diberikan prioritas yang lebih tinggi daripada rute yang lebih pendek dan lebih luas rute yang cocok. - Secara default, hanya permintaan
GET
,HEAD
, danOPTIONS
yang didukung. Di Pratinjau, guna mengonfigurasi dukungan untuk metode lain, lihat Metode rute. Metode yang tidak diaktifkan untuk rute tertentu akan ditolak dengan error405 (Method Not Allowed)
HTTP. - Permintaan
GET
HTTP dengan isi, atau permintaan apa pun dengan cuplikan, ditolak dengan error400
HTTP, karena isi permintaan tidak diizinkan dalamGET
permintaan. - Pencocokan header dan parameter kueri adalah "AND" logis—permintaan harus cocok dengan semua parameter kueri atau kunci header (dan nilai, jika ditentukan) agar cocok dengan rute yang diberikan.
Langkah selanjutnya
- Tinjau dokumentasi tentang mengonfigurasi penyimpanan dalam cache.
- Memahami cara terhubung ke origin yang berbeda.
- Menyiapkan sertifikat TLS (SSL) untuk akun layanan.
- Mengonfigurasi permintaan bertanda tangan untuk mengautentikasi akses ke konten.