Media CDN menyediakan kemampuan pemilihan rute HTTP tingkat lanjut sehingga Anda dapat memetakan traffic ke konfigurasi dan origin edge tertentu pada level yang sangat mendetail.
Mengonfigurasi aturan rute
Mengonfigurasi aturan rute untuk layanan Media CDN.
Konsol
Di konsol Google Cloud , buka halaman Media CDN.
Untuk membuka halaman Detail layanan yang ingin Anda konfigurasi aturan rutenya, klik nama layanan.
Untuk beralih ke mode edit, klik tombol Edit.
Untuk membuka bagian Routing, klik Next.
Tentukan setidaknya satu aturan host. Klik Tambahkan aturan host. Kemudian, lakukan hal berikut:
Untuk Host, tentukan setidaknya satu host untuk pencocokan.
Untuk Deskripsi, berikan deskripsi singkat untuk aturan host.
Atau, untuk mengedit aturan host, klik panah untuk meluaskannya.
Tentukan setidaknya satu aturan rute. Klik Tambahkan aturan rute.
Atau, untuk mengedit aturan rute, klik Edit di baris yang sesuai.
Di panel Edit aturan rute, untuk Prioritas, tetapkan nilai untuk prioritas rute.
Untuk Deskripsi, berikan deskripsi singkat yang dapat membantu mengidentifikasi aturan dalam daftar aturan.
Di bagian Pencocokan, tentukan setidaknya satu kondisi pencocokan. Klik Tambahkan kondisi kecocokan. Kemudian, lakukan hal berikut:
- Untuk Jenis pencocokan, pilih opsi pencocokan jalur.
Untuk Pencocokan jalur, tentukan nama, jalur, atau template. Pertimbangkan untuk menggunakan pencocokan pola karakter pengganti.
Jika diperlukan, pilih juga Aktifkan kepekaan huruf besar/kecil untuk nilai jalur.
Opsional: Pilih Header cocok dan Parameter kueri cocok. Kemudian, klik tombol yang relevan untuk menambahkan header dan parameter kueri. Untuk setiap item, tentukan nama, jenis kecocokan, dan nilai.
Untuk mengetahui informasi selengkapnya, lihat Mencocokkan header dan parameter kueri.
Untuk menyimpan kondisi kecocokan, klik Selesai.
Untuk Tindakan utama, pilih salah satu opsi berikut:
Ambil dari asal: Untuk mengarahkan permintaan ke asal tertentu, pilih opsi ini, lalu pilih asal.
Pengalihan URL: Untuk mengalihkan permintaan, pilih opsi ini. Kemudian, tentukan jenis pengalihan, jalur, dan kode status.
Atau, pilih opsi untuk mengalihkan semua respons ke HTTPS, atau untuk menghapus kueri.
Klik Konfigurasi lanjutan.
Di bagian Tindakan header, klik Tambahkan item.
Pilih jenis tindakan, lalu tentukan header sebagai pasangan nama dan nilai. Kemudian, klik Selesai.
Di bagian Route action, klik Add an item.
Tentukan jenis tindakan dan opsi terkaitnya. Kemudian, klik Selesai.
Untuk Pemfilteran metode HTTP, pilih Sesuaikan pemfilteran metode HTTP.
Kemudian, pilih metode HTTP yang ingin Anda proksikan ke asal Anda.
Untuk menyimpan aturan rute, klik Simpan.
Untuk menyimpan perubahan pada layanan, klik Perbarui layanan.
gcloud dan YAML
Ekspor konfigurasi Media CDN Anda ke dalam file YAML. Gunakan perintah
gcloud edge-cache services export.gcloud edge-cache services export SERVICE_NAME \ --destination=FILENAME.yamlGanti kode berikut:
SERVICE_NAME: Nama layanan Anda.FILENAME: nama file YAML Anda
Perbarui file YAML dengan konfigurasi yang diperlukan seperti yang dijelaskan di bagian-bagian di halaman ini.
Untuk memperbarui layanan, impor konfigurasi Media CDN Anda dari file YAML. Gunakan perintah
gcloud edge-cache services import.gcloud edge-cache services import SERVICE_NAME \ --source=FILENAME.yaml
Mencocokkan permintaan
Konfigurasi Media CDN berisi serangkaian rute yang ditentukan di bagian
Perutean
untuk resource
EdgeCacheService.
Rute ini mencocokkan permintaan berdasarkan (setidaknya) host. Untuk mengetahui detail selengkapnya tentang cara
traffic diarahkan ke asal, lihat
HostRule
dan PathMatcher.
Setiap rute dapat menentukan konfigurasi CDN, penulisan ulang, pengalihan,
kebijakan CORS, header HTTP kustom, dan pemetaan originnya sendiri.
Rute dapat berbagi asal.
Misalnya, Anda dapat merutekan permintaan untuk manifes ke origin tertentu dan menentukan TTL cache singkat dan kebijakan caching negatif. Permintaan segmen dapat dibagi ke origin lain menggunakan header dan parameter kueri untuk memisahkan jenis manifes atau pengguna tertentu.
Contoh berikut menunjukkan cara merutekan permintaan yang cocok dengan header, parameter kueri, dan awalan jalur tertentu 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 lengkap (persis), awalan, dan karakter pengganti. Pencocokan jalur dapat digabungkan dengan pencocokan berbasis host, header, dan parameter kueri untuk membuat aturan perutean permintaan yang terperinci.
Berikut adalah tiga cara untuk mencocokkan jalur URL.
| Kolom | Deskripsi | Contoh |
|---|---|---|
matchRules[].fullPathMatch
|
Kondisi fullPathMatch cocok dengan jalur URL lengkap,
yang tidak menyertakan string kueri. Anda harus menentukan garis miring
di akhir, jika relevan.
|
Rute dengan aturan kecocokan
|
matchRules[].prefixMatch
|
Kondisi prefixMatch mencocokkan awalan jalur URL; URL
yang diawali dengan string yang sama akan cocok.
|
Rute dengan aturan kecocokan |
matchRules[].pathTemplateMatch
|
Kondisi pathTemplateMatch mendukung
operator karakter pengganti, sehingga Anda dapat mencocokkan pola URL dan segmen
jalur yang kompleks, serta mengambil variabel bernama untuk menulis ulang URL.
|
Rute dengan aturan pencocokan
Untuk melihat contoh lainnya, lihat bagian pencocokan pola. |
Untuk mengetahui detail selengkapnya, lihat spesifikasi API untuk
MatchRule.
Misalnya, untuk mencocokkan semua permintaan yang dimulai dengan /stream/, buat aturan rute
yang mirip dengan berikut:
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.m3u8cocok dengan rute ini. - Permintaan ke
media.example.com/stream-eu/id/4567/hls/manifest.m3u8tidak cocok dengan rute ini.
Dalam kasus kedua, Media CDN menampilkan error HTTP 404,
kecuali jika ada rute lain atau rute catch-all
yang dikonfigurasi.
Untuk panduan tentang cara kerja preseden untuk rute dengan awalan serupa, lihat bagian prioritas dan pengurutan rute.
Pencocokan pola (karakter pengganti)
Pencocokan pola memungkinkan Anda mencocokkan beberapa bagian URL, termasuk URL parsial dan sufiks (ekstensi file), dengan menggunakan sintaksis karakter pengganti.
Anda juga dapat mengaitkan satu atau beberapa segmen jalur dengan variabel bernama di kolom
pathTemplateMatch, lalu merujuk ke variabel tersebut saat menulis ulang URL di kolom
pathTemplateRewrite. Hal ini memungkinkan Anda menyusun ulang dan menghapus segmen 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 satu segmen jalur, hingga pemisah jalur berikutnya: /
|
/videos/*/*/*.m4s cocok
/videos/123414/hls/1080p5000_00001.m4s.
|
**
|
Mencocokkan nol atau beberapa segmen jalur. Jika ada, harus berupa operator terakhir. |
/**.mpd cocok
/content/123/india/dash/55/manifest.mpd.
|
{name} or {name=*}
|
Variabel bernama yang cocok dengan satu segmen jalur.
Mencocokkan satu segmen jalur, hingga pemisah jalur berikutnya:
|
/content/{format}/{lang}/{id}/{file}.vtt cocok dengan
/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. Segmen jalur
yang cocok dengan videos/* diambil sebagai variabel bernama.
|
/videos/{language=lang/*}/* cocok dengan
/videos/lang/en/video.m4s dan mengisi variabel jalur
language dengan nilai lang/en.
|
{name=**}
|
Variabel bernama yang cocok dengan nol atau beberapa segmen jalur. Jika ada, harus berupa operator terakhir. |
|
Catatan:
- Jika Anda tidak menulis ulang URL, gunakan operator
*dan**yang lebih sederhana. - Saat menggunakan variabel untuk merekam segmen jalur, bagian URL yang tidak direkam oleh variabel tidak dapat dirujuk dalam
pathTemplateRewriteberikutnya. Untuk contoh, lihat bagian merekam variabel jalur. - Anda tidak dapat merujuk ke variabel dalam
pathTemplateRewriteberikutnya yang tidak ada dipathTemplateMatchpada rute yang sama. - Variabel bersifat peka huruf besar/kecil, dengan
{FORMAT},{forMAT}, dan{format}mewakili variabel dan nilai yang berbeda. - Anda dapat menentukan hingga 10 operator (karakter pengganti atau variabel) dalam kecocokan.
Kolom
pathTemplateMatchdanpathTemplateRewritetidak boleh melebihi 255 karakter.
Contoh: Mencocokkan ekstensi file
Contoh berikut menunjukkan kasus penggunaan umum untuk operator karakter pengganti: mencocokkan semua segmen jalur hingga ke sufiks.
Dalam hal ini, Anda akan melakukan hal berikut:
- Ambil manifes video (playlist) yang diakhiri dengan
.m3u8dan.mpddari asal manifes, dengan menerapkan TTL singkat (5 detik) ke respons ini karena respons tersebut berubah secara berkala. - Ambil segmen video yang berakhir di
.tsdan.m4sdari asal segmen, dan terapkan TTL yang lebih lama (1 hari) ke respons ini.
Pendekatan ini sering digunakan saat menggunakan layanan SSAI (Penyisipan Iklan Sisi Server) atau DAI (Penyisipan Iklan Dinamis), dan untuk video live yang manifesnya diperbarui setiap beberapa detik.
Konfigurasi berikut menunjukkan cara mengonfigurasi perutean Media CDN untuk mendukung hal 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: Menangkap variabel jalur
Contoh berikut menunjukkan cara menggunakan variabel bernama untuk mendeskripsikan satu atau beberapa segmen jalur.
Variabel ini dapat digunakan dalam pathTemplateRewrite untuk menulis ulang jalur sebelum
permintaan dikirim ke origin, atau untuk membuat pathTemplateMatch yang kompleks
dapat menjelaskan dirinya sendiri.
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 sepasang/("garis miring") di jalur URL. - Variabel
{name=**}mencakup semua segmen jalur yang tersisa; dalam kasus ini, variabel tersebut cocok dengansegments/00001.tsdanmaster.m3u8. - Di
pathTemplateRewritepada rute yang sama, Anda merujuk kembali ke beberapa variabel yang Anda ambil dipathTemplateMatch. Anda secara eksplisit menghapus variabel{country}dan{lang}karena tidak cocok dengan struktur direktori di origin.
Dengan contoh ini, hal berikut terjadi:
- URL permintaan masuk
/us/en/hls/123139139/segment_00001.tscocok denganpathTemplateMatchdan ditulis ulang menjadi/123139139/hls/segment_00001.tssebelum dikirim ke origin. - URL permintaan masuk
/us/123139139/master.m3u8tidak cocok denganpathTemplateMatch, dan menerima kode status HTTP404 (Not Found). - URL permintaan masuk
/br/es/dash/c966cbbe6ae3/subtitle_00001.vttjuga cocok denganpathTemplateMatchdan ditulis ulang menjadi/c966cbbe6ae3/dash/subtitle_00001.vttsebelum dikirim ke origin.
Untuk mempelajari lebih lanjut cara pencocokan karakter pengganti beroperasi dengan penulisan ulang URL, lihat bagian penulisan ulang.
Pencocokan host
Setiap layanan dapat mencocokkan beberapa nama host, dengan setiap set nama host berisi grup rutenya sendiri (dikenal sebagai pencocok jalur). Dalam kasus yang paling umum, semua nama host untuk layanan dipetakan ke satu set rute bersama dengan satu daftar host 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 ditayangkan halaman HTTP 404 default. Untuk menerima host apa pun,
Anda dapat menyertakan karakter pengganti * sebagai entri hostRules[].hosts[].
Anda juga dapat menentukan grup rute (misalnya, pengelompokan menurut negara atau live versus on-demand). Karena setiap layanan memiliki satu kebijakan keamanan, kami biasanya merekomendasikan untuk memiliki satu layanan untuk setiap pasar (geografi) atau beban kerja yang Anda miliki.
Catatan:
- Header Host (atau
:authorityHTTP/2) yang berisi port secara implisit dicocokkan dengan host yang dikonfigurasi. Anda tidak perlu menentukan port secara eksplisit. - Jika permintaan dilakukan melalui HTTP, entri
hostRules[].hosts[]dari*.vod.example.comcocok denganus.vod.example.comdanus.vod.example.com:80. - Jika permintaan dilakukan melalui HTTPS (TLS), entri
hostRules[].hosts[]dari*.vod.example.comcocok denganus.vod.example.com:443.
Untuk mengetahui 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 keberadaan nilai header (awalan, akhiran, atau kecocokan persis).
Pencocokan parameter kueri dan header bersifat logis "AND"—permintaan harus cocok dengan semua parameter kueri dan kunci header (dan nilai, jika ditentukan) agar cocok dengan rute yang diberikan.
Misalnya, jika Anda ingin merutekan permintaan dengan nama kolom header dan nilai header tertentu ke origin bernama alternate-origin, konfigurasikan kondisi kecocokan 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 yang tidak memiliki nama header ini atau dengan nilai yang berbeda tidak cocok dengan rute ini.
Untuk mengetahui 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
https://cdn.example.com/videos/1234/abcd/xyz.m3u8?playback_type=live&geo=eu
cocok dengan rute ini.
Untuk mengetahui detail selengkapnya, lihat spesifikasi API untuk
QueryParameterMatcher.
Menentukan rute generik (default)
Secara default, Media CDN menampilkan error HTTP 404 (Not Found) jika permintaan tidak cocok dengan rute yang dikonfigurasi.
Untuk mengonfigurasi rute catch-all, untuk pathMatcher tertentu (kumpulan
rute), lakukan hal berikut:
- Buat
routeRuledengan prioritas terendah (angka tertinggi)—misalnya, 999, yang merupakan prioritas rute terendah. - Konfigurasi
matchRuledengan kecocokan awalan/(mencocokkan semua jalur permintaan). - Konfigurasi (salah satu)
originatauurlRedirectdi 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 / 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 (seperti halaman landing) daripada mengirim permintaan "apa adanya" ke asal.
Prioritas dan pengurutan rute
Setiap rute dalam array routeRules[] harus memiliki priority yang terkait dengannya.
Rute yang lebih spesifik harus disetel ke prioritas yang lebih tinggi (angka yang lebih kecil). Rute yang cocok dengan awalan /stream/ dengan prioritas 1 akan mencegah rute /stream/live/eu/ yang lebih spesifik dengan prioritas 5 agar tidak cocok dengan permintaan apa pun.
- Rute dengan prioritas tertinggi adalah "1", dan yang terendah adalah "999".
- Anda tidak dapat mengonfigurasi dua routeRules atau lebih 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 origin default atau mengarahkan permintaan tersebut 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 mengatasi hal ini, Anda dapat menetapkan prioritas yang lebih tinggi untuk rute yang lebih spesifik (lebih panjang):
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 mencocokkan permintaan dengan benar. Permintaan yang diawali dengan /live/eu/ akan tetap diteruskan ke rute /live/ dengan prioritas 2.
Pemfilteran metode
Secara default, Media CDN hanya memproksi metode GET, HEAD, dan OPTIONS
ke origin Anda dan memfilter metode yang dapat mengubah origin Anda.
Anda dapat mengganti perilaku default ini untuk aturan rute tertentu dengan menentukan
metode yang ingin Anda proksikan ke asal Anda. Selain GET, HEAD, dan OPTIONS, Media CDN mendukung PUT, POST, DELETE, dan PATCH.
Media CDN hanya mencoba lagi atau mencoba failover untuk permintaan yang menggunakan metode HTTP yang lebih aman, seperti GET, HEAD, atau OPTIONS.
Untuk mengonfigurasi dukungan untuk 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
Normalisasi jalur
Normalisasi jalur menjelaskan cara Media CDN menggabungkan beberapa representasi URL menjadi satu representasi kanonis dalam skenario tertentu.
Normalisasi jalur dapat secara langsung meningkatkan rasio hit cache dengan mengurangi jumlah URL permintaan yang merepresentasikan konten yang sama, dan dengan memitigasi error asal untuk asal yang mengharapkan jalur yang dinormalisasi.
Permintaan masuk dinormalisasi sebagai berikut:
- Beberapa garis miring berturut-turut digabungkan menjadi satu garis miring. Misalnya, jalur URL
/videos///12345/manifest.mpddinormalisasi menjadi/videos/12345/manifest.mpd. - Segmen jalur dinormalisasi sesuai dengan
RFC 3986 Bagian 6.2.2.3.
Misalnya, jalur
/a/b/c/./../../gdinormalisasi menjadi/a/gberdasarkan algoritma "remove dot segments" yang ditentukan dalam RFC 3986. Normalisasi ini terjadi sebelum memeriksa cache atau meneruskan permintaan ke origin. - Permintaan tidak dinormalisasi dengan encoding persen. Misalnya, URL dengan karakter garis miring yang dienkode persentase (
%2F) tidak didekode ke dalam bentuk yang tidak dienkode.
URL tetap peka huruf besar/kecil dan tidak dinormalisasi huruf besar/kecilnya. 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 cara menulis ulang permintaan dan mengonfigurasi pengalihan.
Menulis ulang URL permintaan
Media CDN mendukung penulisan ulang host dan jalur. Penulisan ulang mengubah URL yang dikirim ke origin dan memungkinkan Anda mengubah host dan jalur sesuai kebutuhan. Penulisan ulang host dan jalur berada di tingkat rute, sehingga Anda dapat menentukan permintaan spesifik yang ditulis ulang berdasarkan pencocokan apa pun, termasuk jalur, parameter kueri, dan header permintaan.
Untuk mengetahui 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 bertanda tangan. 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 ke /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 awalan jalur yang cocok di
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 asal akan berubah dari
cdn.example.com/videos/* menjadi 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 untuk menulis ulang bagian URL permintaan masuk, lihat bagian mencatat variabel.
Permintaan pengalihan
Media CDN mendukung tiga jenis pengalihan:
- Pengalihan host, yang hanya mengalihkan host (domain), dengan mempertahankan jalur dan parameter kueri yang tidak berubah.
- Pengalihan jalur, yang menggantikan jalur secara penuh.
- Pengalihan awalan jalur, yang hanya menggantikan awalan yang cocok.
Pengalihan secara default adalah HTTP 301 (Moved Permanently), tetapi dapat dikonfigurasi untuk
menampilkan kode status pengalihan yang berbeda berdasarkan per rute.
Konfigurasi berikut adalah contoh pengalihan berbasis awalan, dengan 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 menjadi pengalihan sementara, yang mencegah klien (seperti browser) melakukan caching. Hal ini dapat berguna jika Anda berencana mengubahnya dalam waktu dekat.
Nilai redirectResponseCode yang didukung ditampilkan dalam tabel berikut.
| Kode respons pengalihan | Kode status HTTP |
|---|---|
MOVED_PERMANENTLY_DEFAULT |
HTTP 301 (Dipindahkan Permanen) |
FOUND |
HTTP 302 (Ditemukan) |
SEE_OTHER |
HTTP 303 (See Other) |
TEMPORARY_REDIRECT |
HTTP 307 (Pengalihan Sementara) |
PERMANENT_REDIRECT |
HTTP 308 (Pengalihan Permanen) |
Catatan:
- Rute dapat mengarahkan traffic ke asal atau mengembalikan pengalihan ke klien. Anda tidak dapat menetapkan kolom
origindanurlRedirectsecara bersamaan. - Rute yang mengalihkan ke HTTPS memerlukan setidaknya satu sertifikat SSL yang dilampirkan ke layanan.
Untuk mengetahui 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 untuk mengalihkan semua permintaan klien ke HTTPS secara otomatis. Klien yang terhubung melalui HTTP akan dikirimi kode status HTTP 301 (Permanent Redirect) dengan header Location yang ditetapkan ke URL yang sama menggunakan "https://" dan bukan "http://".
gcloud
gcloud edge-cache services update MY_SERVICE \ --require-tls
Request issued for: [MY_SERVICE] Updated service [MY_SERVICE].
Perintah ini menampilkan deskripsi layanan Anda, dengan requireTls yang kini ditetapkan ke true.
name: MY_SERVICE requireTls: true
Anda juga dapat memilih untuk menetapkan header Strict-Transport-Security sebagai header respons untuk mengarahkan klien agar selalu terhubung langsung melalui HTTPS.
Menggunakan backend penyimpanan pihak ketiga
Media CDN mendukung koneksi ke endpoint HTTP yang dapat dijangkau secara publik 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 asal minimal yang mengonfigurasi bucket yang dihosting 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 resource EdgeCacheService, Anda juga harus mengonfigurasi penulisan ulang host untuk rute yang terkait dengan asal ini (atau asal). Jika tidak, header Host yang ditetapkan oleh
permintaan klien akan digunakan saat mengambil dari origin.
Misalnya, untuk memetakan semua permintaan dengan awalan jalur /legacy/ ke bucket eksternal, Anda dapat mengonfigurasi hostRewrite dan pathPrefixRewrite untuk menghapus awalan ini dari permintaan asal:
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 mengetahui informasi selengkapnya tentang cara header host ditetapkan pada permintaan origin, lihat dokumentasi header permintaan origin.
Cross-Origin Resource Sharing (CORS)
Cross-Origin Resource Sharing
(CORS) adalah pendekatan yang berfokus pada browser untuk membuat permintaan lintas origin secara aman.
Kebijakan CORS memungkinkan Anda menetapkan header CORS secara otomatis, seperti
Access-Control-Allow-Origins, berdasarkan kebijakan per-rute.
Mengonfigurasi CORS
Media CDN memungkinkan Anda menentukan kebijakan CORS pada rute untuk
EdgeCacheService.
Kebijakan CORS menentukan aturan ini dengan sekumpulan header HTTP umum. Anda dapat
menetapkan header CORS umum dalam respons, seperti
Access-Control-Allow-Origin, Access-Control-Max-Age,
dan Access-Control-Allow-Headers. Header ini memungkinkan Anda melakukan panggilan lintas asal 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 pengertian browser), dan Anda mungkin ingin aplikasi frontend Anda
membuat permintaan ke api.example.com untuk mengambil playlist berikutnya atau memuat ulang
daftar konten terkait. Demikian pula, player.example.com mungkin perlu menghubungi cdn.example.com untuk mengambil playlist video dan segmen video:
cdn.example.com perlu menunjukkan bahwa hal ini tidak masalah, dan bahwa player.example.com adalah allowed origin, serta aturan lainnya
(header yang diizinkan, apakah cookie dapat disertakan).
Sebagai contoh lain, jika Anda ingin mengizinkan stream.example.com sebagai origin dan header X-Client-ID dalam permintaan CORS, Anda dapat mengonfigurasi corsPolicy di rute, 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 sesuai
kebutuhan, 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, bukan nilai corsPolicy.
Jika respons asal menetapkan header HTTP, dan Anda telah menetapkan nilai corsPolicy, nilai corsPolicy akan digunakan. Nilai tidak diciutkan
atau digabungkan untuk menghindari pengiriman nilai header yang tidak valid ke klien, atau
secara tidak sengaja menyetel kebijakan yang lebih permisif daripada yang dimaksudkan.
{origin_request_header} khusus diisi dengan header HTTP Origin
dalam permintaan klien. Nilai ini dapat ditetapkan sebagai nilai header respons kustom pada
rute, untuk header Access-Control-Allow-Origin.
Untuk mengetahui detail selengkapnya, lihat spesifikasi API untuk
RouteAction.CORSPolicy.
Kolom kebijakan CORS
Tabel berikut menjelaskan kolom yang berisi 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 browser membatasi durasi ini hingga 2 jam atau kurang, meskipun nilai maksimum (86400 detik) ditentukan. |
Access-Control-Max-Age: 7200
|
| allowMethods |
Menetapkan header respons Secara default, Media CDN hanya mendukung metode |
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 tertentu untuk konten video saat meminta konten lintas asal. |
Access-Control-Expose-Headers: Date, Cache-Status, Content-Type,
Content-Length
|
| allowCredentials |
Menetapkan header respons Header ini tidak disertakan jika disetel ke false. |
Access-Control-Allow-Credentials: true
|
| disabled |
Menonaktifkan corsPolicy tanpa menghapusnya. Permintaan
OPTIONS sebelum penerbangan di-proxy ke origin.
|
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 error, periksa hal berikut:
- Rute harus memiliki
matchRuledengan tepat salah satu dariprefixMatch,fullPathMatch, ataupathTemplateMatchyang ditentukan. API akan menampilkan error jika Anda tidak menyertakan salah satu kolom tersebut. - Pastikan
prioritysetiap rute disetel dengan benar: rute yang lebih spesifik (lebih panjang) harus diberi prioritas yang lebih tinggi daripada kecocokan rute yang lebih pendek dan lebih luas. - Secara default, hanya permintaan
GET,HEAD, danOPTIONSyang didukung. Untuk mengonfigurasi dukungan untuk metode lain, lihat Metode rute. Metode yang tidak diaktifkan untuk rute tertentu ditolak dengan error HTTP405 (Method Not Allowed). - Permintaan HTTP
GETdengan isi, atau permintaan apa pun dengan trailer, ditolak dengan error HTTP400, karena isi permintaan tidak diizinkan dalam permintaanGET. - Pencocokan parameter kueri dan header bersifat "AND" logis—permintaan harus cocok dengan semua kunci parameter kueri atau header (dan nilai, jika ditentukan) agar cocok dengan rute yang diberikan.
Langkah berikutnya
- Tinjau dokumentasi tentang mengonfigurasi caching.
- Pahami cara terhubung ke berbagai origin.
- Siapkan sertifikat TLS (SSL) untuk layanan Anda.
- Konfigurasi permintaan bertanda tangan untuk mengautentikasi akses ke konten.
- Untuk mengetahui detail selengkapnya tentang cara mengonfigurasi resource
EdgeCacheServicemenggunakan Terraform, lihat dokumentasi Terraform Registry.