DigitalOcean Spaces

DigitalOcean Spaces のパブリックおよびプライベートスペースを、オリジンとして使用できます。

DigitalOcean Spaces をオリジンとして使用する

Fastly で DigitalOcean Spaces を使用するには、以下の手順に従ってください。

新規サービスを作成する

新規サービスを作成する手順に従ってください。

  1. 新しいドメインとホストを作成する場合、以下を行います:
    • Create a domain ページの Domain Name フィールドに、URL として使用するホスト名を入力します (例 : cdn.example.com)。
    • Origins ページの Host フィールドに、ホストの適切なアドレスを <SPACE>.<REGION>.digitaloceanspaces.com の形式に沿って入力します。例えば、お客様のスペース名が test123で、リージョンが nyc3 の場合、お客様のホスト名は test123.nyc3.digitaloceanspaces.com となります。
  2. Edit this host ページで ホストの詳細を編集する場合、以下を行ってください。
    • まだ入力されていない場合は、Name フィールドに分かりやすい任意のサービスの名前を入力します。
    • Address フィールドにホストの適切なアドレスが入力されていることを確認します (例: test123.nyc3.digitaloceanspaces.com)。この情報はホスト作成時に入力されたものです。
  3. トランスポートレイヤーセキュリティ (TLS) のセクションでホストの情報を編集する場合、以下を行ってください。
    • Enable TLS?を離れる デフォルト設定を Yes のままにし、Fastly とオリジン間の接続を保護します。
    • Certificate hostname フィールドに、Address フィールドに表示されるアドレスを入力します (例: test123.nyc3.digitaloceanspaces.com)。
    • SNI hostname フィールドで、Match the SNI hostname to the Certificate hostname のチェックボックスを選択します。ホスト作成時に入力したアドレスが表示されます。
  4. Advanced options のOverride hostフィールドに、ホストの適切なアドレスを入力します (例:test123.nyc3.digitaloceanspaces.com)。この情報はホスト作成時に入力されたものです。

結果をテストする

デフォルトでは、yourdomain.global.prod.fastly.net という DNS マッピングが作成されます。上記の例では、cdn.example.com.global.prod.fastly.net となります。指定したドメイン名の DNS エイリアスを作成します (例: cdn.example.com に対する global-nossl.fastly.net の CNAME)。

Fastly は、明示的な Cache-Control ヘッダーのないコンテンツを1時間にわたってキャッシュします。キャッシュヘッダーを送信しているかどうかは、curl コマンドを使用して確認することができます。例:

$ curl -I opscode-full-stack.nyc3.digitaloceanspaces.com
HTTP/1.1 200 OK
x-amz-id-2: ZpzRp7IWc6MJ8NtDEFGH12QBdk2CM1+RzVOngQbhMp2f2ZyalkFsZd4qPaLMkSlh
x-amz-request-id: ABV5032583242618
Date: Fri, 18 Mar 2012 17:15:38 GMT
Content-Type: application/xml
Transfer-Encoding: chunked

この例では、Cache-Control ヘッダーが設定されていないため、デフォルトの TTL が適用されます。

より詳細なキャッシュ制御

JavaScript ファイルや画像など、異なるタイプのアセットがキャッシュされる方法について、コントロールを強化する必要がある場合は、キャッシュ鮮度のドキュメントをご覧ください。

プライベート DigitalOcean Spaces の使用

Fastly でプライベート DigitalOcean Space を使うためには、以下の手順に従ってください。

設定前の注意点

正しい Space が指定され、オリジンがポート443に設定され、Spaces のデータが Fastly で利用可能であることを確認してください。これは、認証前に行う必要があります。

設定にはアクセスキー、シークレットキー、Space 名が必要になります。DigitalOcean Spaces 認証ヘッダーは、以下の形式を利用します。

Authorization: AWS `AWSAccessKeyId`:`Signature`

DigitalOcean のウェブサイトから、以下の情報が必要です。

  • アクセスキーシークレットキー
  • お客様の Space

プライベート DigitalOcean Space 使用のための Fastly の設定

Fastly でプライベート DigitalOcean Space を使用するために、Date ヘッダー (認証署名で使用するため) と Authorization ヘッダーの、2つのヘッダーを作成します

Date ヘッダーの作成

  1. Fastly コントロールパネルにログインします。
  2. Home ページから、適切なサービスを選択します。検索ボックスで ID、名称、ドメインによる検索が行えます。
  3. Edit configuration をクリックし、アクティブなバージョンをクローンするオプションを選択します。
  4. Content をクリックします。
  5. Create header をクリックします。

    ヘッダーページによる日付ヘッダーの作成

  6. 以下の要領で、Create a headerページの各フィールドに入力します。

    • Name フィールドに Date と入力します。
    • TypeメニューからRequestを選択し、ActionメニューからSetを選択します。
    • Destinationフィールドにhttp.Dateと入力します。
    • Sourceフィールドにnowと入力します。
    • Ignore if setメニューからNoを選択します。
    • Priority フィールドに 10 を入力します。
  7. Create をクリックします。コンテンツページに新しい Date ヘッダーが表示されます。これは後で Authorization ヘッダーの署名で使用します。

Authorization ヘッダーの作成

次に、以下の仕様で認証ヘッダーを作成します。

  1. Create header を再度クリックし、別の新しいヘッダーを作成します。

    ヘッダーページで Authorization ヘッダーを作成する

  2. 以下の要領で、Create a headerページの各フィールドに入力します。

    • Name フィールドに Spaces Authorization と入力します。
    • TypeメニューからRequestを選択し、ActionメニューからSetを選択します。
    • Destinationフィールドにhttp.Authorizationと入力します。
    • Ignore if set メニューから No を選択します。
    • Priorityフィールドに20を入力します。
  3. Source フィールドには、ヘッダー認証情報を次の形式で入力します。

    "AWS <DigitalOcean access key>:" digest.hmac_sha1_base64("<DigitalOcean secret key>", if(req.method == "HEAD", "GET", req.method) LF LF LF req.http.Date LF "/<Space name>" req.url.path)

    <DigitalOcean access key><DigitalOcean secret key ID>、および <Space name> は、先ほど収集した情報に置き換えます。例:

    "AWS JKCAUEFV2ONFFOFMSSLA:" digest.hmac_sha1_base64("P2WPSu68Bfl89j72vT+bXYZB7SjlOwhT4whqt27", if(req.method == "HEAD", "GET", req.method) LF LF LF req.http.Date LF "/test123" req.url.path)
  4. Create をクリックします。新しい Authorization ヘッダーが Content ページに表示されます。

Source フィールドのパラメーターの詳細

Authorization ヘッダーの Source フィールドを詳しく見てみましょう。基本的な形式は以下の通りです。

AWS<Access Key><Signature Function><key><message>

Source フィールドには以下の情報が含まれます。

要素説明
AWSアクセスキーの前に配置された定数です。この値は常に AWS です。
access keyDigitalOcean アカウントからのアクセスキー。この例では JKCAUEFV2ONFFOFMSSLA を使用しています。
signature function署名のキーとメッセージを検証するためのアルゴリズム。この例では digest.hmac_sha1_base64(<key>, <message>) を使用しています。
keyDigitalOcean アカウント からのシークレットキー。この例では P2WPSu68BfI89j72vT+bXYZB7SjIOwhT4whqt27 を使用しています。
messageStringToSign の UTF-8 エンコーディングです。メッセージの各部分の内訳は以下の表を確認してください。

Authorization ヘッダーの Source フィールドに含まれるメッセージは、以下のような基本的な形式になっています。

<HTTP-verb></n><Content-MD5>/n<Content-Type></n><Date></n><CanonicalizedAmzHeader></n><CanonicalizedResource>

Source フィールドには以下の情報が含まれます。

要素説明
HTTP-verbREST 動詞。この例req.methodでは を使用しています。HEAD を GET に書き換えるのは、オリジンにリクエストを送る前に Varnish が内部的に行っているからです。
/n改行表示の定数。この値は常に /n です。
Content-MD5メッセージの整合性チェックとして使用される content-md5 ヘッダー値。空欄であることが多いです。この例では、LF (ラインフィード) を使用しています。
Content-TypeMIME-type を指定するための Content-type ヘッダーの値。空欄であることが多いです。この例では LF を使用しています。
Date日付と時間のタイムスタンプ。上記の手順で最初に別のヘッダーとして作成した req.http.Date を使用しています。
CanonicalizedAmzHeaderSpaces の実装をカスタマイズする x-amz ヘッダー。空欄であることが多いです。この例では LF を使用しています。
CanonicalizedResourceDigitalOcean Space 名。この例では "/test123" を使用しています。

S3 Spaces オブジェクトへのリダイレクトと S3 Spaces レスポンスのキャッシング

カスタム VCL を使用することで、Fastly は Spaces オブジェクトへのリダイレクトに従い Spaces レスポンスと301または302 レスポンスを別々にキャッシュすることができます。

Fastly VCL とカスタム VCL の組み合わせに関する手順を必ずお読みください。Fastly のデフォルト設定を上書きしない場合は、VCL ボイラープレート全体を含めることが重要です。

Fastly を Spaces オブジェクトへのリダイレクトに従うように設定するには、カスタム VCL に以下の VCL を挿入します。

内部vcl_recv

1sub vcl_recv {
2 if (req.http.redir != "true") {
3 set req.backend = Main_Origin;
4 } else {
5 set req.backend = spaces_backend;
6 set req.http.host = "nyc3.digitaloceanspaces.com";
7 }
8#FASTLY recv
9 if (req.method != "HEAD" && req.method != "GET" && req.method != "FASTLYPURGE") {
10 return(pass);
11 }
12 return(lookup);
13}

内部vcl_deliver

1sub vcl_deliver {
2 if (resp.status == 302 || resp.status == 301) {
3 set req.http.redir = "true";
4 set req.url = regsub(resp.http.Location, "http://nyc3.digitaloceanspaces.com/(.*)$", "/\1");
5 set req.http.Fastly-Force-Shield = "yes";
6 restart;
7 }
8#FASTLY deliver
9 return(deliver);
10}

Main_Originspaces_backend は、リダイレクトを適用するサービスのバックエンドの名を必ず設定してください。正確な名前は、VCL にて確認できます。サービス表示中に、ページ上部の VCL ボタンをクリックします。

カスタム VCL にこれらの VCL スニペットを追加したら、VCL ファイルをアップロードし、新しいサービスージョンをアクティブにして変更を適用します。

このページでは、サードパーティが提供するサービスとの統合について説明しています。詳細については、統合に関する注意事項をご覧ください。


翻訳についての注意事項
このガイドは役に立ちましたか?

このフォームを使用して機密性の高い情報を送信しないでください。サポートが必要な場合は、サポートチームまでご連絡ください。このフォームは reCAPTCHA によって保護されており、Google のプライバシーポリシー利用規約が適用されます。