サイト全体ワンタイムURL機能の利用

ウェブアクセラレータのサイト全体ワンタイムURL機能の利用方法に関するページです。

概要(サイト全体ワンタイムURL機能とは)

サイト全体ワンタイムURL機能は、ワンタイムURL発行に必要なシークレット(X-WebAccel-Secret)を、サイト内の全コンテンツに設定する機能です。
ウェブアクセラレータのワンタイムURLは、有償コンテンツ配布用のダウンロード用ページやイベントで期間限定の動画や画像の公開ページ作成などといった、サイト内のコンテンツに指定時間のみアクセス可能にしたい時にご利用いただけます。

注意

利用上の注意事項
サイト全体ワンタイムURL機能は有効にするとサイト内の全コンテンツが通常のURLではアクセスできなくなります。
事前にリンク元のURLを全てワンタイムURLに切り替えてからこの機能を有効にしてください。

前提条件

  • 本手順ではサイト全体のワンタイムURLを設定する手順を解説しています。特定のコンテンツを個別に設定したい場合は 【TIPS】特定のコンテンツを指定時間のみアクセス可能にしたい(ワンタイムURLを利用する) のページをご確認ください。
  • ウェブアクセラレータが適切に設定(DNSの設定及びステータス有効化)がされている必要があります。
  • 別ドメインにリソース共有する場合は、サイト全体がワンタイムURLにより別のサイトからCORSでアクセスする方式となるためCORS機能を有効にする必要があります。
  • 設定できるシークレットは最大2つまでとなります。(シークレットのローテーション用)
  • オリジン側で X-WebAccel-Secret を付与している+本機能で設定の両方を併用した場合、シークレットは X-WebAccel-Secret と本機能でそれぞれ最大2つ(計4つ)まで設定できます。
  • シークレットは8文字以上16文字以内で指定ください。(使用可能な文字種はカンマとスペースを除いた印字可能ASCII)

注釈

ワンタイムURL利用時の個別キャッシュ削除について
個別でキャッシュ削除する場合は、URL単位となります。(特定の種類だけのキャッシュ削除はできません)
(例) http://cdn.example.com/secure/example.html?webaccel_secure_time=5d2d9453&webaccel_secure_hash=21d498aa696c35431cd2f0240d9eeb3aの場合、
http://cdn.example.com/secure/example.htmlで個別キャッシュ削除します。

設定手順

STEP1 ワンタイムURLの生成

対象のサイトのワンタイムURLを生成します。
URLは、「シークレット」、「対象サイトのURL」、有効期限を合わせて生成しますので、任意のサーバで作成可能です。 これを利用して、ウェブサイトやウェブアプリケーションに生成の機能を入れて利用することもできます。

注意

ワンタイムURLを生成した時点では、サイト全体ワンタイムURL機能が無効のため、ワンタイムURLを利用することが出来ません。

ワンタイムURL生成例(コマンド入力)

  • 以下の例は、対象のサイトのURLが「http://cdn.example.com/secure/example.html」、シークレットの文字列が「secret001」、有効期限が(2019年08月31日0時0分0秒まで有効)の場合になります。
  • ワンタイムURL対象をファイルでなくディレクトリにする場合は、「/secure/」といった様に、ディレクトリ名を指定して下さい。

1. 有効期限をUnixTimeで出力します。

# date -d '2019/08/31 00:00:00' +%s
1567177200

2. 有効期限をHEX(16進数)に変換します。

# printf "%x\n" 1567177200
5d6939f0

3.対象のファイルのパスと有効期限のHEX値、シークレットからハッシュ値(MD5)を生成します。

# echo -n "//secure/example.html/secret001/5d6939f0/" | openssl dgst -md5
(stdin)= f1f337e3f3ba0b4e60c7f463c4c1c0c2
ファイルパス、シークレット、有効期限を / で連結し両端に / を付けたものをハッシュ値(MD5)にする。

4.URLと組み合わせれば有効期限まで有効なワンタイムURLが出来上がります。

形式:
http://cdn.example.com/secure/example.html?webaccel_secure_hash="MD5の値"&webaccel_secure_time="HEX値"
URL
http://cdn.example.com/secure/example.html?webaccel_secure_hash=f1f337e3f3ba0b4e60c7f463c4c1c0c2&webaccel_secure_time=5d6939f0

ワンタイムURL生成例(スクリプト)

  • 以下の例は、対象のファイルのURLが「http://cdn.example.com/secure/example.html」、シークレットの文字列が「secret001」、有効期限は、下記スクリプト実行の10分後になります。
#!/bin/bash

base_url="http://cdn.example.com"
file_path="/secure/example.html"
secret="secret001"
limit_time=$(printf %x $(expr $(date +%s) + 600)) # 10分間(600s)有効

md5=$(echo -n "/$file_path/$secret/$limit_time/" | md5sum)

echo "${base_url}${file_path}?webaccel_secure_time=$limit_time&webaccel_secure_hash=${md5%% *}"

スクリプト実行結果

$ ./create_url.sh ←スクリプトのファイル名は任意です
http://cdn.example.com/secure/example.html?webaccel_secure_time=5d2d9453&webaccel_secure_hash=21d498aa696c35431cd2f0240d9eeb3a

ワンタイムURL生成例(PHP)

  • 以下の例は、対象のファイルのURLが「http://cdn.example.com/secure/example.html」、シークレットの文字列が「secret001」、有効期限は、下記プログラムの実行の10分後になります。
  • ワンタイムURL対象をファイルでなくディレクトリにする場合は、「/secure/」といった様に、ディレクトリ名を指定してください。
<?php
$base_url="http://cdn.example.com";
$file_path="/secure/example.html";
$secret = "secret001";
$limit_time = sprintf("%08x", time()+600);  // 10分間(600s)有効

echo generateURL($base_url, $file_path, $secret, $limit_time) . "\n";

function generateURL($base_url, $file_path, $secret, $limit_time) {
    $md5 = md5("/" . $file_path . "/" . $secret . "/" . $limit_time ."/" );
    $url = $base_url . $file_path . "?webaccel_secure_time=" . $limit_time . "&webaccel_secure_hash=" . $md5;
    return $url;
}

STEP2 サイト全体ワンタイムURL機能を有効にします。

ワンタイムURLの準備ができたら、ウェブアクセラレータのサイト全体ワンタイムURL機能を有効にします。

注意

利用上の注意事項
サイト全体ワンタイムURL機能は有効にするとサイト内の全コンテンツが通常のURLではアクセスできなくなります。
事前にリンク元のURLを全てワンタイムURLに切り替えてからこの機能を有効にしてください。

1. 対象サイトの「設定」ボタンをクリックします。

2. サイト全体ワンタイムURL設定 項目のチェックボックスの有効をクリックします。

3. サイト全体ワンタイムURLを有効にしますか?の画面が開きますので、問題なければ「有効にする」ボタンをクリックします。

4. 表示された サイト全体ワンタイムURLシークレット 項目にシークレットを入力します。

5. 「保存」ボタンをクリックします。

6. サイトの設定を変更しますか?の画面が開きますので、問題なければ「保存」ボタンをクリックします。

※ 変更した内容は、「保存」ボタンをクリックした時点で反映されます。

7. 保存が正常に完了すると、以下のような画面が表示されます。

8. 正常に配信できることを確認します。

STEP1で指定した有効期限内に、生成したURLでアクセスを行い、コンテンツが表示されることをご確認下さい。

  • MD5、有効期限のHEXの指定が無い場合、もしくは間違っている場合は、「403 Forbidden」が返されます。
  • 正しいMD5、有効期限のHEXを指定しても、有効期限を過ぎた場合は、「403 Forbidden」が返されます。

シークレットのローテーション手順

サイト全体ワンタイムURLシークレット 項目に2つの値を設定することで、配信を停止することなくシークレットを変更できます。

有効期限切れの前にシークレットをローテーション(更新)する

(例) シークレット「secret001」から「secret002」への更新

初期状態

有効期限 有効
シークレット
secret001
アクセスに使用するURL http(s)://example.com/foo?webaccel_secure_hash=${hash1}&webaccel_secure_time=${t1}
(secret001より生成したワンタイムURL)

1. 新しいシークレット「secret002」でワンタイムURLを生成します。

※ ワンタイムURLの生成方法については 設定手順 をご確認ください。

2. 新しいシークレットの追加

有効期限(t1)を過ぎる前にコントロールパネルの設定で新しいシークレット「secret002」を追加します。

コントロールパネルのサイト全体ワンタイムURL設定 項目の追加をクリックします。

追加したテキストボックスに更新するシークレットを入力します。

「保存」ボタンをクリックします。

サイトの設定を変更しますか?の画面が開きますので、問題なければ「保存」ボタンをクリックします。

※ 変更した内容は、「保存」ボタンをクリックした時点で反映されます。

保存が正常に完了すると、以下のような画面が表示されます。

設定が保存されたら、生成したワンタイムURLにアクセス可能か確認します。

3. ワンタイムURLの更新

生成したワンタイムURLでアクセスが確認できたらサイト内のワンタイムURLを更新します。

有効期限 有効
シークレット
secret001、secret002
アクセスに使用するURL http(s)://example.com/foo?webaccel_secure_hash=${hash2}&webaccel_secure_time=${t2}
(secret002より生成したワンタイムURL)

4. 古いシークレットの削除

サイト全体ワンタイムURL設定 項目から古いシークレット「secret001」の削除をクリックします。

「保存」ボタンをクリックします。

サイトの設定を変更しますか?の画面が開きますので、問題なければ「保存」ボタンをクリックします。

保存が正常に完了すると、以下のような画面が表示されます。

有効期限 有効
シークレット
secret002
アクセスに使用するURL http(s)://example.com/foo?webaccel_secure_hash=${hash2}&webaccel_secure_time=${t2}
(secret002より生成したワンタイムURL)

有効期限が切れてしまった後にシークレットを更新する

(例) シークレット「secret001」から「secret002」への更新

初期状態

有効期限 期限切れ
シークレット
secret001
アクセスに使用するURL http(s)://example.com/foo?webaccel_secure_hash=${hash1}&webaccel_secure_time=${t1}
(secret001より生成したワンタイムURL)

1. 新しいシークレット「secret002」でワンタイムURLを生成します。

※ ワンタイムURLの生成方法については 設定手順 をご確認ください。

2. 新しいシークレットに修正

既に有効期限が過ぎてしまった場合はコントロールパネルの設定で新しいシークレット「secret002」へ修正します。

コントロールパネルのサイト全体ワンタイムURL設定 項目のシークレットを「secret001」から「secret002」へ修正します。

「保存」ボタンをクリックします。

サイトの設定を変更しますか?の画面が開きますので、問題なければ「保存」ボタンをクリックします。

保存が正常に完了すると、以下のような画面が表示されます。

設定が保存されたら、生成したワンタイムURLにアクセス可能か確認します。

3. ワンタイムURLの更新

生成したワンタイムURLでアクセスが確認できたらサイト内のワンタイムURLを更新します。

有効期限 有効
シークレット
secret002
アクセスに使用するURL http(s)://example.com/foo?webaccel_secure_hash=${hash2}&webaccel_secure_time=${t2}
(secret002より生成したワンタイムURL)