日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

EdgeScript場景示例

本文為您介紹EdgeScript的定制化鑒權(quán)邏輯、定制化請求頭和響應(yīng)頭控制、定制化改寫和重定向、定制化緩存控制和定制化限速的場景示例。

定制化鑒權(quán)規(guī)則

自定義鑒權(quán)規(guī)則場景示例如下:

  • 需求

    • 請求URL格式:/path/digest/?.ts?key=&t=

    • 針對.ts類請求,自定義防盜鏈需求如下:

      • 規(guī)則1:參數(shù)t或參數(shù)key不存在,響應(yīng)403,增加響應(yīng)頭X-AUTH-MSG標(biāo)識鑒權(quán)失敗原因。

      • 規(guī)則2:參數(shù)t表示過期時間,若參數(shù)t小于當(dāng)前時間,則響應(yīng)403,增加響應(yīng)頭X-AUTH-MSG標(biāo)識鑒權(quán)失敗原因(此類鑒權(quán)注意關(guān)注客戶端與CDN側(cè)取時間可能會有差異,客戶端請求URL中攜帶的時間快慢都可能會影響到鑒權(quán)結(jié)果,導(dǎo)致鑒權(quán)失敗)。

      • 規(guī)則3:md5(私鑰 + path + 文件名.后綴)==digest;若digest不匹配,響應(yīng)403。

  • 對應(yīng)的EdgeScript規(guī)則

    #鑒權(quán)類型的判斷
    if eq(substr($uri, -3, -1), '.ts') {
      #參數(shù)是否存在判斷
        if or(not($arg_t), not($arg_key)) {
        add_rsp_header('X-AUTH-MSG', 'auth failed - missing necessary arg')
        exit(403)
      }
      #是否為數(shù)字判斷
        t = tonumber($arg_t)
      if not(t) {
        add_rsp_header('X-AUTH-MSG', 'auth failed - invalid time')
        exit(403)
      }
      #鑒權(quán)時間是否過期判斷
        if gt(now(), t) {
        add_rsp_header('X-AUTH-MSG', 'auth failed - expired url')
        exit(403)
      }
      #鑒權(quán)算法,對請求進(jìn)行正則提取
        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'
      #待簽算的鑒權(quán)串拼接
        signstr = concat(key, sec1, sec3)
      digest = md5(signstr)
      #簽算和請求中的token串比較
        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)
      }
    }

定制化請求頭和響應(yīng)頭控制

文件自動重命名場景示例如下:

示例:

add_rsp_header('Content-Disposition', concat('attachment;filename=', tochar(34), filename, tochar(34)))
說明
  • 通過在HTTP應(yīng)答中添加響應(yīng)頭“Content-Disposition:attachment”來實現(xiàn)消息體的強(qiáng)制下載,并且有參數(shù)filename時,自動重命名為filename,無參數(shù)時,使用默認(rèn)命名。

  • filename增加雙引號,34為雙引號的ascii,可經(jīng)tochar轉(zhuǎn)回字符串。

輸出:

Content-Disposition: attachment;filename="monitor.apk"

對應(yīng)的EdgeScript規(guī)則:

if $arg_filename {
  hn = 'Content-Disposition'
    hv = concat('attachment;filename=', $arg_filename)
    add_rsp_header(hn, hv)
}

定制化改寫和重定向

定制化改寫和重定向場景示例如下:

  • 精確URI改寫

    • 需求

      將用戶請求/helloCDN內(nèi)部改寫成/index.html,回源和緩存的URI都將變成/index.html,參數(shù)保持原樣。

    • 對應(yīng)的EdgeScript規(guī)則

      if match_re($uri, '^/hello$') {
          rewrite('/index.html', 'break')
      }
  • 文件后綴改寫

    • 需求

      將用戶請求的URI信息/1.txt,在CDN節(jié)點上改寫成/1.<url參數(shù)type>,即,使用請求URL中攜帶的type參數(shù)值來替換URI中的文件后綴,例如:/1.txt?type=mp4將會被改成/1.mp4?type=mp4然后回源獲取文件,并緩存在CDN節(jié)點上。

    • 對應(yīng)的EdgeScript規(guī)則

      if and(match_re($uri, '^/1.txt$'), $arg_type) {
           rewrite(concat('/1.', $arg_type), 'break')
      }
  • 文件后綴小寫化

    • 需求

      將URI改成小寫。

    • 對應(yīng)的EdgeScript規(guī)則

      pcs = capture_re($uri, '^(.+%.)([^.]+)')
      section = get(pcs, 1)
      postfix = get(pcs, 2)
      
      if and(section, postfix) {
          rewrite(concat(section, lower(postfix)), 'break')
      }
  • 添加URI前綴

    • 需求

      將用戶請求^/nn_live/(.*),在CDN節(jié)點上改寫為/3rd/nn_live/$1

    • 對應(yīng)的EdgeScript規(guī)則

      pcs = capture_re($uri, '^/nn_live/(.*)')
      sec = get(pcs, 1)
      
      if sec {
           dst = concat('/3rd/nn_live/', sec)
           rewrite(dst, 'break')
      }
  • 302重定向

    • 需求

      將根目錄/,302重定向到/app/movie/pages/index/index.html頁面。

    • 對應(yīng)的EdgeScript規(guī)則

      if eq($uri, '/') {
          rewrite('/app/movie/pages/index/index.html', 'redirect')
      }
  • 302重定向HTTPS

    • 需求

      將如下URI(對根目錄匹配,^/$)跳轉(zhuǎn)到https://demo.aliyundoc.com/index.html ,跳轉(zhuǎn)后的URI可按需填寫。

      • http://demo.aliyundoc.com

      • https://demo.aliyundoc.com

    • 對應(yīng)的EdgeScript規(guī)則

      if eq($uri, '/') {
          rewrite('https://demo.aliyundoc.com/index.html', 'redirect')
      }

定制化緩存控制

自定義緩存時長的場景樣例如下:

  • 需求

    根據(jù)各類條件,自定義資源緩存時長。

  • 對應(yīng)的EdgeScript規(guī)則

    if match_re($uri, '^/image') {
        set_cache_ttl('code', '301=10,302=5')
    }
    
    if eq(substr($uri, -4, -1), '.mp4') {
        set_cache_ttl('path', 5)
    }
    if match_re($uri, '^/201801/mp4/') {
        set_cache_ttl('path', 50)
    }
    if match_re($uri, '^/201802/flv/') {
        set_cache_ttl('path', 10)
    }
    說明

    /image開頭的URI,針對響應(yīng)碼設(shè)置緩存時長,301緩存10s,302緩存5s。

定制化限速

自定義限速值的場景樣例如下:

  • 需求

    如果有參數(shù)spunit,則實施限速。sp參數(shù)指明限速數(shù)值,unit為參數(shù)單位,KB或MB。

  • 對應(yīng)的EdgeScript規(guī)則

    if and($arg_sp, $arg_unit) {
        sp = tonumber($arg_sp)
        if not(sp) {
            add_rsp_header('X-LIMIT-DEBUG', 'invalid sp')
            return false
        }
    
        if and(ne($arg_unit, 'k'), ne($arg_unit, 'm')) {
            add_rsp_header('X-LIMIT-DEBUG', 'invalid unit')
            return false
        }
    
        add_rsp_header('X-LIMIT-DEBUG', concat('set on: ', sp, $arg_unit))
        limit_rate(sp, $arg_unit)
        return true
    }

區(qū)域、運(yùn)營商訪問限制

區(qū)域、運(yùn)營商訪問限制的場景樣例如下:

  • 需求

    • 通過識別客戶端請求中攜帶的IP地址的區(qū)域、運(yùn)營商歸屬來實現(xiàn)訪問限制。

    • 識別客戶端IP的區(qū)域、運(yùn)營商歸屬的函數(shù)如下。詳細(xì)請參見請求判斷相關(guān)

      • client_region:使用該函數(shù)可以返回客戶端IP歸屬地區(qū)的編碼。

      • client_isp:使用該函數(shù)可以返回客戶端IP歸屬運(yùn)營商的編碼。

  • 對應(yīng)的EdgeScript規(guī)則

    # 省份限制,省份不匹配的,禁止訪問
    ip_region_id=client_region()
    if not(match_re(ip_region_id, '440000|370000')) {
        add_rsp_header('X-REGION-BLOCK-DEBUG', concat('hit ip_region_id:', ip_region_id))
        exit(403)
    }
    
    # 運(yùn)營商限制,運(yùn)營商不匹配的,禁止訪問
    ip_isp_id=client_isp()
    if not(match_re(ip_isp_id, '100017|100025')) {
        add_rsp_header('X-REGION-BLOCK-DEBUG', concat('hit ip_isp_id:', ip_isp_id))
        exit(403)
    }

EdgeScript配置示例操作視頻

本視頻以配置域名自定義限速策略為例,演示通過CDN控制臺給域名配置EdgeScript邊緣腳本的整個流程,包括添加邊緣腳本、發(fā)布邊緣腳本到模擬環(huán)境、測試模擬環(huán)境功能、發(fā)布邊緣腳本到生產(chǎn)環(huán)境和測試生產(chǎn)環(huán)境功能。