リクエストに対して複数のオリジンをチェックする


この記事は Checking multiple backends for a single request
https://docs.fastly.com/guides/performance-tuning/checking-multiple-backends-for-a-single-request
を基に記載されています。最新の情報は上記のページをご参照下さい。

Fastlyではプライマリ、セカンダリのオリジンサーバーを設定し、プライマリのオリジンが正しいレスポンスを返却できない場合にセカンダリのオリジンサーバーからコンテンツを取得するような設定を行うことが可能です。

処理に必要な設定

この処理を行うためには以下のような設定が必要となります。
1. Cache Settingの作成
プライマリのオリジンが正しくないレスポンスを返却した場合に、リクエストの処理を再度行う(restart)設定
2. Request Headerの作成 1
http.Fastly-Force-Shield ヘッダーを付与します。これはFastlyの配信拠点内でのクラスタリングという処理を強制するためのものです。
3. Request Headerの作成 2
プライマリオリジンが正しくないレスポンスを返却している場合に、セカンダリのオリジンを参照するよう設定を行います。

それでは続いてそれぞれの設定を順に行ってみます。

1. Cache Settingの作成

オリジンが正しくないレスポンス(200または304以外のレスポンスコードとします)を返却した場合に、VCLの処理を再度最初からやり直す設定(restart)を追加します。
この時Fastlyサーバー内部のrestartパラメーターに自動的に "1" がセットされます。

レスポンスがオリジンから返却されたタイミングでの処理ですので、VCL上ではvcl_fetchのサブルーチン内で処理を行います。以下の手順に従って設定を行って下さい。

  1. Fastlyポータルにログイン、Configure をクリック
  2. 設定を行いたい Service を選択
  3. 編集可能なバージョンを開くか、編集可能なバージョンがない場合は Configuration から Clone active をクリック
  4. Setting タブをクリック
  5. Create cache setting ボタンをクリック。

  6. Create a cache setting に以下の通り入力して下さい:

    • Name フィールドは Return Restart (または識別可能なその他の名前).
    • TTL (seconds) フィールドは 0.
    • Action メニューは Restart processing.
    • Stale TTL (seconds)0.
  7. Create ボタンをクリック。Settingページに作成したキャッシュ設定が表示されます。

  8. Settings ページの今作成したキャッシュ設定の横の Attach a condition をクリックして下さい。Create a new cache condition ウインドウが表示されます。

  9. Create a new cache condition フィールドに以下の通り入力して下さい:

    • Type メニューは Cache.
    • Name フィールドには Restart Request (または識別可能なその他の名前).
    • Apply if フィールドには beresp.status != 200 && beresp.status != 304.(これはオリジンからのレスポンスコードが200または304以外という条件です)
  10. Save and apply to ボタンをクリック.

2. Request Headerの作成 1

Fastlyがエンドユーザーからリクエストを受けた(vcl_recv)タイミングでhttp.Fastly-Force-Shield というヘッダーをリクエストに付与します。これはFastlyの配信拠点内でのクラスタリングという処理を強制するためのものです。詳細は理解しなくても大丈夫なので、これはおまじないのようなものもだと考えて以下の設定を追加して下さい。

  1. Content タブをクリック
  2. Create header ボタンをクリック。Create a header ページが表示されます
  3. Create a new header フィールドに以下の通り入力して下さい:
    • Name フィールドはFastly Internal Shielding (または識別可能なその他の名前).
    • Type メニューは Request を選択し ActionSet を選択
    • Destination フィールドは http.Fastly-Force-Shield
    • Source フィールドは "yes"
    • Ignore if set メニューは No
    • Priority フィールドは 10
  4. Create ボタンをクリック。作成したヘッダー設定がContentページに表示されます。

3. Request Headerの作成 2

プライマリオリジンが正しくないレスポンスを返却した場合に、セカンダリのオリジンを参照するよう設定を行います。

手順1でプライマリオリジンからのレスポンスコードが200または304以外の場合にはrestart処理を行っているため、restartパラメータが1という条件でセカンダリのオリジンを参照するように設定することでこれが実現できます。

事前準備

この設定を行う前にセカンダリのオリジン(backend)をOriginタブから設定して下さい。
また、作成したセカンダリのオリジンの名前を右上のOption - Show VCLから確認して控えておいて下さい。

オリジンの名前は通常VCLの一番上の部分にbackend F_XXXXX というフォーマットで記載されています。

  1. Contentタブで Create header ボタンをクリック。Create a header ページが表示されます

  2. Create a header フィールドに以下の通り入力して下さい:

    • Name フィールド Second Backend (または識別可能なその他の名前).
    • Type メニューは Request を選択し ActionSet を選択
    • Destination フィールドは backend (このbackendには、コンテンツ取得先のオリジンを保持するパラメータです)
    • Source フィールド Second_Backend (ここは予め設定したセカンダリのbackendの名前を記入して下さい。).
    • Ignore if set メニューは No
    • Priority フィールドは 11.
  3. Create ボタンをクリックして下さい。新しいヘッダー設定が表示されます。

Header用のConditionの作成

作成したふたつのHeader設定(Second Backend, Fastly Internal Shielding)にConditionを設定します。

  1. ヘッダー設定の横の Attach a condition リンクをクリックして下さい。Create a new request condition ウインドウが表示されます。

  2. Create a new request condition フィールドに以下の通り入力して下さい:

    • Type メニューは Request
    • Name フィールドは Req.restart (または識別可能なその他の名前).
    • Apply if フィールドは req.restarts == 1
  3. Save and apply to をクリックして下さい。作成したコンディションがSecond Backend 設定に追加されています。

  4. 作成した Req.restarts コンディションを先程作成したFastly Internal Shieldingにも適用して下さい。

セカンダリバックエンドがプライマリバックエンドとは異なるHostヘッダーを期待している場合は、Create Header で http.hostに対してセカンダリバックエンドが期待しているHostヘッダーを設定して下さい。
5. 設定が完了したら新しい設定を有効にするために画面右上の Activate ボタンをクリックして下さい。