All Products
Search
Document Center

Server Load Balancer:Contoh Skenario AScript

Last Updated:Mar 06, 2026

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 t atau key tidak ada, kembalikan kode status HTTP 403 dan tambahkan header respons X-AUTH-MSG untuk menunjukkan alasan kegagalan otentikasi.

      • Aturan 2: Parameter t menentukan waktu kedaluwarsa absolut. Jika t lebih awal dari waktu saat ini, kembalikan kode status HTTP 403 dan tambahkan header respons X-AUTH-MSG untuk menunjukkan alasan kegagalan otentikasi.

      • Aturan 3: Nilai md5 harus sesuai dengan digest. Jika md5 tidak sesuai dengan digest, 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-Agent permintaan diawali dengan ijkplayer atau Ysten, 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 referer bukan http[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.1 atau 10.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 filename ada, ganti nama file menjadi nilai filename. 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: attachment pada respons HTTP untuk memaksa unduhan isi pesan. Jika parameter filename tersedia, file secara otomatis diganti namanya menjadi filename. Jika tidak, nama default digunakan.

    • Nilai filename harus 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 /hello menjadi /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.txt menjadi /1.<URL parameter type>. Misalnya, /1.txt?type=mp4 menjadi /1.mp4?type=mp4 untuk 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.com ke www.example.com tanpa 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.com ke www.example.com sambil 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=b ke https://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-id dan 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)