【原】阿里雲可編程CDN 邊緣腳本(EdgeScript)接入嘗試


需求:

demo 根據來源IP返回國家碼、郵編,根據UA判斷是否是移動端

方案:

已知,國內CDN廠商的默認配置是不支持這種定制需求的,需要提交工單聯系專業的人士去配置,好在阿里雲支持這種邊緣腳本的方式,降低了配置的門檻,同時也有龐大的函數庫,能夠像積木式地組合出個性化的CDN定制配置。

1. 准備代碼

c_country = client_country()
c_region = client_region()
# 獲取 Country-Code
if c_country {
    # say(concat('client_country:', c_country))
    add_req_header('X-Country-Code', c_country)
}
if c_region {
    # say(concat('client_region:', c_region))
    add_req_header('X-Region-Code', c_region)
}
# 判斷UA
if $http_user_agent {
    ua = match_re($http_user_agent, '(Android|iPhone|iPad|iPod|Symbian|IEMobile|BlackBerry|networkbench|Windows Phone|MQQBrowser)')
    if ua {
        add_req_header('X-Is-Mobile-Viewer', 'true')
    } else {
        add_req_header('X-Is-Mobile-Viewer', 'false')
    }
}

2. 開始配置

接入后,並保存,發布到模擬環境

注意:邊緣腳本需要在模擬環境先進行測試再發布到生產環境,先測,測沒問題之后再上生產環境,同時,生產環境也是不支持直接修改的,需要先把生產的規則,先復制到測試環境,修改完了,測試沒問題之后,再推到生產環境,這么做的目的是防止生產環境改錯,造成大量不可用。

3. 模擬環境驗證

綁定 IP 進行測試下

curl -x 42.123.119.100:80 -o /dev/null -v 'http://www.5179.top'

在 nginx 日志處,把加的兩個 header 也打印出來

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" "$http_x_country_code"     "$http_x_is_mobile_viewer"';

nginx 的訪問日志如下:

# 本地機器訪問
100.122.16.158 - - [30/May/2021:18:06:40 +0800] "GET / HTTP/1.1" 200 7770 "-" "curl/7.64.1" "111.199.187.234, 116.211.219.36" "CN" "false"
# 國外機器訪問
100.122.16.250 - - [30/May/2021:18:15:05 +0800] "GET / HTTP/1.1" 200 7770 "-" "curl/7.29.0" "67.218.156.67, 116.211.219.36" "US" "false"

可以看到 Country-Code 已經都能正常取到。

4. 將規則推送至生產環境

此時,生產環境已經生效

5. 如何對上述規則進行debug

然后再次訪問的時候,可以在 URL 的后面添加 ?_es_dbg=wow 的形式去獲取 debug 的過程,

例如:curl http://www.5179.top\?_es_dbg=wow -Iv

對應的1、2、5、9、13、17,其實是對應的代碼行號,根據這個 trace 我們可以很方便的對自定義的規則進行調試。

參考:

1.概述:https://help.aliyun.com/document_detail/126565.html?spm=a2c4g.11186623.6.717.21e71e0cN9Cuw8

2.場景demo:https://help.aliyun.com/document_detail/126571.html?spm=a2c4g.11186623.6.738.4a90238f8ZzYVZ

3.視頻:https://developer.aliyun.com/live/2690


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM