このトピックでは、特定のシナリオに適用できるEdgeScriptルールの例について説明します。
FLVプルのローカル認証
- 要件
のために。flvのリクエストでは、ホットリンク保護の要件は次のように定義されます。- ルール1: リクエストに
signまたはexpiresパラメーターが含まれていない場合、CDNノードは403ステータスコードを返し、障害の原因を示すX-AUTH-MSGレスポンスヘッダーを追加します。 - ルール2:
tパラメーターは有効期限を指定します。tパラメーターの値が現在の時刻より前の場合、CDNノードは403ステータスコードを返し、障害の原因を示すX-AUTH-MSGレスポンスヘッダーを追加します。 - ルール3: md5の値はsignの値と一致します。 両方の値が一致しない場合、CDNノードは403のステータスコードを返します。 失敗の原因を示すために、応答ヘッダ
X-AUTH − MSGが追加される。
- ルール1: リクエストに
- Parameters
- expires: 有効期限 (Unixタイムスタンプ) を定義するURLパラメーター。 このパラメーター値は、現在のサーバー時刻より大きくなければなりません。
- sign: 署名フィールド。 このフィールドを生成するルールは、
sign=md5($uri + $expires + $secret)です。
- EdgeScriptルール
secret='abc' if eq(substr($uri, -4, -1), '.flv') { if or(not($arg_sign) 、not($arg_expires)) { add_rsp_header('X-AUTH-MSG '、'auth failed - missing need arg') exit(403) } t = tonumber($arg_expires) if gt(now(), t) { add_rsp_header('X-AUTH-MSG '、'auth failed - expired url') exit(403) } digest = md5(concat($uri, $arg_expires, secret)) if ne (ダイジェスト, $arg_sign) { add_rsp_header('X-AUTH-MSG', 'auth failed - invalid sign') exit(403) } }
User-Agent blacklist for FLV pull
- 要件
User-Agentブラックリスト機能。
リクエストヘッダーのハイフン (
-) をアンダースコア (_) に置き換える必要があります。 For example, X-USER-ID is replaced with x_user_id. - EdgeScriptルール
if eq(substr($uri, -4, -1), '.flv') { blacklist = [] set (ブラックリスト, 'black1', 1) set (ブラックリスト, 'black2', 1) ua = req_header('user_agent') if eq(get(blacklist, ua), 1) { exit(403) } }
IPアドレスによるFLVストリーミング禁止
- 要件
シンガポール、台湾 (中国) 、珠海、チャイナテレコム出身のユーザーがFLVコンテンツをストリーミングすることを禁止します。
注 国コードの詳細については、「付録」をご参照ください。 - EdgeScriptルール
if eq(substr($uri, -4, -1), '.flv') { c_country = client_country() c_region = client_region() c_city = client_city() c_isp = client_isp() if eq(c_country, 'SG') { exit(403) } if eq(c_region, 'TW_01 ') { exit(403) } if eq(tonumber(c_city), 440400) { exit(403) } if eq(tonumber(c_isp), 100017) { exit(403) } }
URI rewrite for FLV pull
- 要件
patternパラメーターに基づいてURIにサフィックスを追加します。 例:
pattern = 1, uri = /test/live.flv --> /test/live1.flv - EdgeScriptルール
if eq(substr($uri, -4, -1), '.flv') { if $arg_pattern { dst = concat(substr($uri, 1, -5), $arg_pattern, '.flv') rewrite(dst, 'break') } }
認証ロジックのカスタマイズ
- 要件
- リクエスト URL 形式 :
/path/digest/?.ts? key=&t= .tsのリクエストの hotlink 保護のカスタマイズの要件は次のとおりです。- ルール 1: リクエストに
tまたはkeyパラメーターが含まれていない場合、CDN ノードがステータスコード 403 を返し、障害の原因を示すX-AUTH-MSGレスポンスヘッダーを追加します。 - ルール 2:
tパラメーターは絶対的な有効期限を指定します。 指定されたtパラメーターが現刻より早い場合、CDN ノードはステータスコード 403 を返し、障害の原因を示すX-AUTH-MSGレスポンスヘッダーを追加します。 - ルール 3: CDN ノードが
md5パラメーターとdigestパラメーターを照合します。md5とdigestが一致しない場合、CDN ノードはステータスコード 403 を返します。md5パラメーターの値の形式 : Private key + Path + File name.extension
- ルール 1: リクエストに
- リクエスト URL 形式 :
- 対応する EdgeScript ルール
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) } }
リクエストヘッダーとレスポンスヘッダーのカスタマイズ
- 要件
filenameパラメーターが指定されている場合、ファイル名は、filenameパラメーターで指定されている値へ自動的に変更されます。 ファイル名が指定されていない場合は、既定のファイル名が使用されます。 - 対応する EdgeScript ルール
if $arg_filename { hn = 'Content-Disposition' hv = concat('attachment;filename=', $arg_filename) add_rsp_header(hn, hv) } The following rule has the similar effect as the preceding rule, but the value for the filename parameter is enclosed in a pair of double quotation marks. 文字列 "34" は、二重引用符の ASCII 文字列です。 tochar 関数を使用して引用符文字列 ("") に再変換が可能です。 add_rsp_header('Content-Disposition', concat('attachment;filename=', tochar(34), filename, tochar(34))) Output: Content-Disposition: attachment;filename="monitor.apk"
書き換えまたはリダイレクトのカスタマイズ
- URI の書き換え
- 要件
/helloを/index.htmlに書き換えるよう、CDN を設定します。 これによって、元のリクエストの URI が/index.htmlに変更されている場合、パラメーターは変更されません。 - 対応する EdgeScript ルール
if match_re($uri, '^/hello$') { rewrite('/index.html', 'break') }
- 要件
- ファイル拡張子の書き換え
- 要件
/1.txtを/1. <value of arg_type>に書き換えるよう CDN を設定します。 例 :/1.txt? type=mp4は/1.mp4? type=mp4(オリジンフェッチおよびキャッシュ) に書き換えられます 。 - 対応する EdgeScript ルール
if and(match_re($uri, '^/1.txt$'), $arg_type) { rewrite(concat('/1.', $arg_type), 'break') }
- 要件
- ファイル拡張子の小文字への変換
- 要件
URI 文字列を小文字に変換します。
- 対応する EdgeScript ルール
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/(. *)を/3rd/nn_live/$1に書き換えるようCDN を設定します。 - 対応する EdgeScript ルール
pcs = capture_re($uri, '^/nn_live/(.*)') sec = get(pcs, 1) if sec { dst = concat('/3rd/nn_live/', sec) rewrite(dst, 'break') }
- 要件
- 302 リダイレクトの設定
- 要件
/ルートディレクトリの/app/movie/pages/index/index.htmlへの 302 リダイレクトを実行します。 - 対応する EdgeScript ルール
if eq($uri, '/') { rewrite('/app/movie/pages/index/index.html', 'redirect') }
- 要件
- HTTPS 302 リダイレクトの設定
- 要件
^/$ルートディレクトリに一致する次の URI をhttps://rtmp.cdnpe.com/index.htmlにリダイレクトします。 必要に応じて、リダイレクトされる URI を指定することができます。http://rtmp.cdnpe.comhttps://rtmp.cdnpe.com
- 対応する EdgeScript ルール
if eq($uri, '/') { rewrite('https://rtmp.cdnpe.com/index.html', 'redirect') }
- 要件