Topik ini menyediakan contoh kode AScript untuk menyesuaikan aturan pengalihan lalu lintas dalam skenario seperti Perlindungan hotlink, daftar hitam dan daftar putih, kontrol header permintaan dan respons kustom, menulis ulang, serta Pengalihan.
Perlindungan Hotlink
Algoritma Otentikasi Kustom
-
Persyaratan:
-
Format URL permintaan:
/path/digest/?.tskey=&t=. -
Untuk permintaan
.ts, terapkan aturan Perlindungan hotlink berikut:-
Aturan 1: Jika parameter
tataukeytidak ada, kembalikan kode status HTTP 403 dan tambahkan header responsX-AUTH-MSGuntuk menunjukkan alasan kegagalan otentikasi. -
Aturan 2: Parameter
tmenentukan waktu kedaluwarsa absolut. Jikatlebih awal dari waktu saat ini, kembalikan kode status HTTP 403 dan tambahkan header responsX-AUTH-MSGuntuk menunjukkan alasan kegagalan otentikasi. -
Aturan 3: Nilai
md5harus sesuai dengandigest. Jikamd5tidak sesuai dengandigest, respons 403 dikembalikan.Nilai `md5` dihitung sebagai:
Private key + path + file name.extension.
-
-
-
Aturan AScript terkait:
if eq(substr($uri, -3, -1), '.ts') { if or(not($arg_t), not($arg_key)) { add_rsp_header('X-AUTH-MSG', 'auth failed - missing necessary arg') exit(403) } t = tonumber($arg_t) if not(t) { add_rsp_header('X-AUTH-MSG', 'auth failed - invalid time') exit(403) } if gt(now(), t) { add_rsp_header('X-AUTH-MSG', 'auth failed - expired url') exit(403) } pcs = capture_re($request_uri,'^/([^/]+)/([^/]+)/([^?]+)%?(.*)') sec1 = get(pcs, 1) sec2 = get(pcs, 2) sec3 = get(pcs, 3) if or(not(sec1), not(sec2), not(sec3)) { add_rsp_header('X-AUTH-MSG', 'auth failed - malformed url') exit(403) } key = 'b98d643a-9170-4937-8524-6c33514bbc23' signstr = concat(key, sec1, sec3) digest = md5(signstr) if ne(digest, sec2) { add_rsp_header('X-AUTH-DEBUG', concat('signstr: ', signstr)) add_rsp_header('X-AUTH-MSG', 'auth failed - invalid digest') exit(403) } }
Daftar Hitam User-Agent
-
Persyaratan: Jika
User-Agentpermintaan diawali denganijkplayeratauYsten, kembalikan kode status HTTP 403. -
Aturan AScript yang sesuai adalah sebagai berikut:
if and($http_user_agent, match_re($http_user_agent, '^(ijkplayer|Ysten).*$')) { add_rsp_header('X-BLOCKLIST-DEBUG', 'deny') exit(403) }
Daftar Putih Referer
-
Persyaratan: Jika
refererbukanhttp[s]://***alibaba.com***, kembalikan kode status HTTP 403. -
Aturan AScript yang sesuai:
if and($http_referer, match_re($http_referer, '^(http|https)://(.)+\.alibaba\.com.*$')) { return true } add_rsp_header('X-WHITELIST-DEBUG', 'missing') exit(403)
Daftar Hitam dan Daftar Putih
Daftar Hitam IP
-
Persyaratan: Jika alamat IP klien adalah
127.0.0.1atau10.0.0.1, kembalikan kode status HTTP 403. -
Aturan AScript yang sesuai:
if match_re($remote_addr, '127.0.0.1|10.0.0.1') { add_rsp_header('X-IPBLOCK-DEBUG', 'hit') exit(403) }
Kontrol Header Permintaan dan Respons Kustom
Penggantian Nama File Otomatis
-
Persyaratan: Jika parameter kueri
filenameada, ganti nama file menjadi nilaifilename. Jika tidak, gunakan nama default. -
Aturan AScript yang sesuai adalah sebagai berikut:
if $arg_filename { hn = 'Content-Disposition' hv = concat('attachment;filename=', $arg_filename) add_rsp_header(hn, hv) } -
Contoh:
add_rsp_header('Content-Disposition', concat('attachment;filename=', tochar(34), filename, tochar(34)))Catatan-
Tambahkan header respons
Content-Disposition: attachmentpada respons HTTP untuk memaksa unduhan isi pesan. Jika parameterfilenametersedia, file secara otomatis diganti namanya menjadifilename. Jika tidak, nama default digunakan. -
Nilai
filenameharus diapit tanda kutip ganda. Kode ASCII untuk tanda kutip ganda adalah 34, yang dapat dikonversi menjadi karakter menggunakan `tochar`.
-
-
Output:
Content-Disposition: attachment;filename="monitor.apk"
Timpa Header Respons Origin
-
Persyaratan: Timpa header respons origin
Content-Type. -
Aturan AScript yang sesuai:
add_rsp_header('Content-Type', 'audio/mpeg')
Menulis Ulang dan Pengalihan Kustom
Menulis Ulang URI Eksak
-
Persyaratan: Tulis ulang permintaan pengguna untuk
/hellomenjadi/index.html. Baik pengambilan asal maupun URI yang di-cache menjadi/index.html, sedangkan parameter kueri tetap tidak berubah. -
Aturan AScript yang sesuai:
if match_re($uri, '^/hello$') { rewrite('/index.html', 'break') }
Menulis Ulang Ekstensi File
-
Persyaratan: Tulis ulang permintaan pengguna untuk
/1.txtmenjadi/1.<URL parameter type>. Misalnya,/1.txt?type=mp4menjadi/1.mp4?type=mp4untuk pengambilan asal dan caching. -
Aturan AScript yang sesuai:
if and(match_re($uri, '^/1.txt$'), $arg_type) { rewrite(concat('/1.', $arg_type), 'break') }
Konversi Ekstensi File Menjadi Huruf Kecil
-
Persyaratan: Konversi seluruh URI menjadi huruf kecil.
-
Aturan AScript yang sesuai adalah:
pcs = capture_re($uri, '^(.+\.)([^.]+)') section = get(pcs, 1) postfix = get(pcs, 2) if and(section, postfix) { rewrite(concat(section, lower(postfix)), 'break') }
Tambahkan Awalan URI
-
Persyaratan: Tulis ulang permintaan pengguna yang cocok dengan ekspresi reguler
^/nn_live/(.*)menjadi/3rd/nn_live/$1. -
Aturan AScript yang sesuai adalah sebagai berikut:
pcs = capture_re($uri, '^/nn_live/(.*)') sec = get(pcs, 1) if sec { dst = concat('/3rd/nn_live/', sec) rewrite(dst, 'break') }
Pengalihan 302
-
Persyaratan: Lakukan Pengalihan 302 dari direktori root
/ke/app/movie/pages/index/index.html. -
Aturan AScript yang sesuai adalah sebagai berikut:
if eq($uri, '/') { rewrite('/app/movie/pages/index/index.html', 'redirect') }
Pengalihan 302 ke HTTPS
-
Persyaratan:
Arahkan URI berikut yang cocok dengan pola direktori root
^/$:-
http://rtmp.cdnpe.com -
https://rtmp.cdnpe.com
Arahkan ke
https://aliyun.com. Anda dapat menentukan URI yang diarahkan sesuai kebutuhan. -
-
Aturan AScript yang sesuai adalah sebagai berikut:
if eq($uri, '/') { rewrite('https://aliyun.com', 'redirect') }
Pengalihan URL (Tanpa Parameter URI)
-
Persyaratan: Arahkan permintaan untuk
www.test.comkewww.example.comtanpa mempertahankan parameter URI asli. -
Aturan AScript yang sesuai adalah sebagai berikut:
if and(eq(req_header('Host'), 'www.test.com')) { rewrite('www.example.com', 'redirect') }Hasil: Setelah pengalihan, parameter URI hilang, tetapi tanda tanya tetap ada di akhir URI.
Hapus Tanda Tanya di Akhir
-
Aturan AScript yang sesuai adalah:
if and(eq(req_header('Host'), 'www.test.com')) { rewrite('www.example.com', 'enhance_redirect') }
Pengalihan URL (Dengan Parameter URI)
-
Persyaratan: Arahkan permintaan untuk
www.test.comkewww.example.comsambil mempertahankan parameter URI asli. -
Aturan AScript yang sesuai:
if and(eq(req_header('Host'), 'www.test.com')) { rewrite(concat('www.example.com', $uri), 'enhance_redirect') }
Pencocokan Ekspresi Reguler untuk Nama Domain Wildcard (Tambahkan Akhiran URI)
-
Persyaratan: Jika bisnis Anda menggunakan beberapa nama domain, kurangi upaya konfigurasi dengan menggunakan pencocokan ekspresi reguler untuk mengidentifikasi nama domain wildcard dan menambahkan parameter akhiran URI tertentu.
-
Aturan AScript yang sesuai:
host_re = match_re(req_header('Host'), '.*.test.com') url_match = null(find($uri, 'index.php')) if and(host_re, url_match) { rewrite(concat($host, '/index.php?s=', $uri), 'enhance_redirect') }
Pengalihan HTTP ke HTTPS (Hapus Parameter Kueri)
-
Persyaratan: Arahkan
http://www.test.com/tmp/?a=bkehttps://www.test.com, menghapus semua parameter kueri dari permintaan. -
Aturan AScript yang sesuai:
host_re = match_re(req_header('Host'), 'www.test.com') url_match = not(null(find($request_uri, '?'))) # Cegah pengalihan tak henti if req_scheme('http') { if and(host_re, url_match) { rewrite('https://www.test.com', 'enhance_redirect') # Kode status 302 } }
Troubleshooting
Tambahkan x-request-id
-
Persyaratan: Gunakan AScript untuk menghasilkan nilai
x-request-iddan tambahkan ke permintaan serta respons guna menyederhanakan pelacakan dan troubleshooting permintaan. -
Aturan AScript yang sesuai:
requestid=md5(concat(rand(1, 10000), now())) add_req_header('x-request-id', requestid) add_rsp_header('x-request-id', requestid)