详情页标题前

阿里云负载均衡AScript场景示例-云淘科技

详情页1

本文为您介绍AScript的防盗链需求、黑白名单、请求头和响应头、改写和重定向和远程鉴权的场景示例。

防盗链需求 | 黑白名单 | 定制化请求头和响应头控制 | 定制化改写和重定向 | 远程鉴权

防盗链需求

自定义鉴权算法

自定义鉴权算法场景示例:

  • 需求:
    • 请求URL格式:/path/digest/?.tskey=&t=
    • 针对.ts类请求,自定义防盗链需求如下:
      • 规则1:参数t或参数key不存在,响应403,增加响应头X-AUTH-MSG标识鉴权失败原因。
      • 规则2:参数t表示绝对过期时间,若参数t小于当前时间,则响应403,增加响应头X-AUTH-MSG标识鉴权失败原因。
      • 规则3:md5digest匹配。若md5digest不匹配,响应403。

        md5取值格式为:私钥 + path + 文件名.后缀

  • 对应的AScript规则:
    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($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)
        }
    
    }

User-Agent黑名单

User-Agent黑名单场景示例:

  • 需求:当请求User-Agentijkplayer开头、或者以Ysten开头,则响应403。
  • 对应的AScript规则:
    if and($http_user_agent, match($http_user_agent, '^[ijkplayer|Ysten].*$')) {
        add_rsp_header('X-BLOCKLIST-DEBUG', 'deny')
        exit(403)
    }

Referer白名单

Referer白名单场景示例:

  • 需求:当referer不是http[s]://***alibaba.com***时,响应403。
  • 对应的AScript规则:
    if and($http_referer, match($http_referer, '^(http|https)://(.)+\.alibaba\.com.*$')) {
        return true
    }
    
    add_rsp_header('X-WHITELIST-DEBUG', 'missing')
    exit(403)

黑白名单

IP黑名单

IP黑名单场景示例:

  • 需求:当请求客户端IP为127.0.0.1、或者为10.0.0.1时,响应403。
  • 对应的AScript规则:
    if match($remote_addr, '127.0.0.1|10.0.0.1') {
        add_rsp_header('X-IPBLOCK-DEBUG', 'hit')
        exit(403)
    }

定制化请求头和响应头控制

文件自动重命名

文件自动重命名场景示例:

  • 需求:当有参数filename时,自动重命名为filename,无参数时,使用默认命名。
  • 对应的AScript规则:
    if $arg_filename {
        hn = 'Content-Disposition'
        hv = concat('attachment;filename=', $arg_filename)
        add_rsp_header(hn, hv)
    }
  • 示例:
    add_rsp_header('Content-Disposition', concat('attachment;filename=', tochar(34), filename, tochar(34)))

    说明

    • 通过在HTTP应答中添加响应头Content-Disposition:attachment来实现消息体的强制下载,并且有参数filename时,自动重命名为filename,无参数时,使用默认命名。
    • filename增加双引号,双引号的ASCII编码为34,可经tochar转回字符串。
  • 输出:
    Content-Disposition: attachment;filename="monitor.apk"

覆盖源站响应头

覆盖源站响应头场景示例:

  • 需求:覆盖源站Content-Type响应头。
  • 对应的AScript规则:
    add_rsp_header('Content-Type', 'audio/mpeg')

定制化改写和重定向

精确URI改写

精确URI改写场景示例:

  • 需求:将用户请求/hello内部改写成/index.html,回源和缓存的URI都将变成/index.html,参数保持原样。
  • 对应的AScript规则:
    if match($uri, '^/hello$') {
        rewrite('/index.html', 'break')
    }

文件后缀改写

文件后缀改写场景示例:

  • 需求:将用户请求/1.txt内部改写成/1.。例如:/1.txt?type=mp4将会被改成/1.mp4?type=mp4回源并缓存。
  • 对应的AScript规则:
    if and(match($uri, '^/1.txt$'), $arg_type) {
         rewrite(concat('/1.', $arg_type), 'break')
    }

文件后缀小写化

文件后缀小写化场景示例:

  • 需求:将URI改成小写。
  • 对应的AScript规则:
    pcs = capture($uri, '^(.+%.)([^.]+)')
    section = get(pcs, 1)
    postfix = get(pcs, 2)
    
    if and(section, postfix) {
        rewrite(concat(section, lower(postfix)), 'break')
    }

添加URI前缀

添加URI前缀场景示例:

  • 需求:将用户请求^/nn_live/(.*)内部改写为/3rd/nn_live/$1
  • 对应的AScript规则:
    pcs = capture($uri, '^/nn_live/(.*)')
    sec = get(pcs, 1)
    
    if sec {
         dst = concat('/3rd/nn_live/', sec)
         rewrite(dst, 'break')
    }

302重定向

302重定向场景示例:

  • 需求:将根目录/,302重定向到/app/movie/pages/index/index.html页面。
  • 对应的AScript规则:
    if eq($uri, '/') {
        rewrite('/app/movie/pages/index/index.html', 'redirect')
    }

302重定向HTTPS

302重定向HTTPS场景示例:

  • 需求: 将以下URI(对根目录匹配,^/$
    • http://rtmp.cdnpe.com
    • https://rtmp.cdnpe.com

    跳转到https://aliyun.com,跳转后的URI可按需填写。

  • 对应的AScript规则:
    if eq($uri, '/') {    rewrite('https://aliyun.com', 'redirect')}

远程鉴权

自定义远程鉴权

自定义远程鉴权场景示例:

  • 需求:根据请求发送的数据格式,获得响应结果,决定当前请求是否放过。
  • 对应的AScript规则:
    auth_addr = 'http://xx.cn/outer/cdn/checkplay?host='
    remote_addr_t = ''
    if $remote_addr {
        remote_addr_t = $remote_addr
    }
    sp = ''
    if $arg_sp {
        sp = $arg_sp
    }
    token = ''
    if $arg_token {
        token = $arg_token
    }
    auth_key = ''
    if $arg_auth_key {
        auth_key = $arg_auth_key
    }
    t_cookie = ''
    if $http_cookie {
        t_cookie = $http_cookie
    }
    referer = ''
    if $http_referer {
        referer = $http_referer
    }
    range = ''
    if $http_range {
        range = $http_range
    }
    
    auth_addr = concat(auth_addr, $host, '&ip=', remote_addr_t, '&sp=', sp, '&token=', token, '&auth_key=', auth_key, '&cookie=', t_cookie, '&referer=', referer, '&range=', range)
    req_info = []
    set(req_info, 'addr', auth_addr)
    set(req_info, 'retry', 1)
    set(req_info, 'timeout', 1000)
    set(req_info, 'method', 'POST')
    req_header = []
    set(req_header, 'Connection', 'close')
    set(req_info, 'send_headers', req_header)
    rs = http_request(req_info)
    if rs {
        code = get(rs, 'code')
        if eq(code, '403') {
            exit(403)
        }
        headers = get(rs, 'headers')
        if headers {
            x_limit_rate_after = get(headers, 'x-limit-rate-after')
            if and(x_limit_rate_after, match_re(x_limit_rate_after, '\d+(k|m|g)$')) {
                num = substr(x_limit_rate_after, 1, -2)
                unit = substr(x_limit_rate_after, -1, -1)
                limit_rate_after(tonumber(num), unit)
            }
            x_speed = get(headers, 'x-speed')
            if and(x_speed, match_re(x_speed, '\d+(k|m|g)$')) {
               num = substr(x_speed, 1, -2)
               unit = substr(x_speed, -1, -1)
               limit_rate(tonumber(num), unit)
            }
        }
    }

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:https://www.yunxiaoer.com/169256.html

(0)
上一篇 2023年12月10日 上午11:51
下一篇 2023年12月10日 上午11:52
详情页2

相关推荐

  • 阿里云日志服务SLS分析Nginx访问日志-云淘科技

    日志服务支持采集Nginx日志,并进行多维度分析。本文介绍分析网站访问情况、诊断及调优网站和重要场景告警的分析案例。 前提条件 已采集Nginx访问日志,详情请参见使用Nginx模式采集日志。 在日志采集配置向导中,已根据日志字段自动生成索引,如果您要修改索引,详情请参见配置索引。 背景信息 Nginx是一款主流的网站服务器,当您选用Nginx搭建网站时,N…

    阿里云日志服务SLS 2023年12月10日
  • 阿里云大数据开发治理平台 DataWorksDeleteFile-云淘科技

    调用DeleteFile删除数据开发中的文件。如果文件已经提交过,那么DeleteFile API会同时触发一个异步在调度系统删除的流程,需要用DeleteFile API返回的DeploymentId继续调用GetDeployment轮询被触发的异步删除流程的状态。 调试 您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。运行…

  • 阿里云ECS云服务器CreateDiskReplicaPair-云淘科技

    调用CreateDiskReplicaPair创建一个云盘异步复制关系。 接口说明 云盘异步复制是一种基于块存储数据复制能力实现跨地域数据保护的功能。该功能可以将某一块云盘的数据,异步复制到其他地域内的另一块云盘中,实现存储数据的跨地域容灾备份。您可以通过该功能建立关键业务的容灾能力,保护数据库数据的同时提升业务的连续性。关于功能注意事项以及计费的更多信息,…

    阿里云服务器 2023年12月9日
  • 阿里云负载均衡IPv6实例说明-云淘科技

    传统型负载均衡CLB支持创建IPv6实例。创建后,系统会为实例分配一个公网IPv6地址,转发来自IPv6客户端的请求。 背景信息 IPv6是Internet Protocol Version 6的缩写,其中Internet Protocol译为互联网协议。IPv6是互联网工程任务组IETF(Internet Engineering Task Force)设计…

    阿里云负载均衡 2023年12月10日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云日志服务SLSGetMachineGroup-云淘科技

    调用GetMachineGroup接口查看目标机器组的具体信息。 接口说明 Host由Project名称和日志服务Endpoint构成,您需要在Host中指定Project。 已创建并获取AccessKey。更多信息,请参见访问密钥。 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维。RA…

    阿里云日志服务SLS 2023年12月10日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。