Fastlyサーバー上でTTLを設定(上書き)する方法


#1

この記事の内容について

Fastlyサーバー上でのキャッシュされるオブジェクトのTTLは、通常オリジンサーバーからのレスポンスに含まれるCache-Controlヘッダーなどに基づいて設定されます。

ただしオリジンサーバーで適切なTTLのCache-Contorlヘッダーを付与することが難しい場合もあると思います。この記事ではそのような場合にTTLの値をFastlyサーバー側で設定(上書き)する方法を説明します。

特に記載がない限り本記事の記載内容はデフォルト設定での挙動となります。
この記事に記載されている内容の詳細は以下のURL等を参照して下さい
https://docs.fastly.com/guides/basic-configuration/overriding-caching-defaults-based-on-backend-responses

Cache Objectを作成する

最初にCache Objectを作成します。Cache ObjectとはTTLの設定と考えて下さい。
FastlyではこのCache ObjectにConditionとよばれる条件を設定することでTTLを特定の条件に設定します。

  1. FastlyのWebポータルにログインしConfigureをクリックします。

  2. Serviceメニューから設定を行いたいServiceを選択して下さい。

  3. Edit Configurationボタンをクリックし、Clone activateをクリックして下さい。Serviceの新しいversionが表示されます。

  4. Settingタブをクリックして下さい。

  5. Create cache settingボタンをクリックして下さい。"Create a new cache setting"ページが表示されます

  6. Create a new cache settingに必要な値を入力して下さい

  • TTL (seconds) にはキャッシュさせたい時間を秒で入力して下さい
  • ActionにはDeliverを選択して下さい。
  • Stale TTL (seconds) はここでは説明しませんが、とりあえず300と入力して下さい
  • Description にはこのTTL設定を識別するための何か適当な名前を入力して下さい。
  1. 必要な値を入力したらCreateボタンをクリックして下さい

これでCache Objectの作成は完了です。続いて作成したCache Objectに条件(Condition)を適用します。

Cache Objectを適用する条件を設定する

1.作成したCache Objectの右側にある Attach a condition をクリックして下さい
2. Create cache settingボタンをクリックして下さい。"Create a new cache condition"ウインドウが表示されます。


3. Create a new cache setting内の項目を以下のように入力して下さい。
TypeメニューからCache
Nameからこの条件を識別するための適当な名前
Apply ifに適用したい条件(Conditions)を入力して下さい
Priorityはデフォルトのままにしておいて下さい
4. Save and applyボタンをクリックして下さい
5. 変更を反映させるためにActivateをクリックして下さい

Apply if に適用する条件(Conditions)の代表的なものとしては以下の様なものがあります。

オリジンからのレスポンスが404か403の場合
beresp.status == 404 || beresp.status == 403.

コンテンツタイプがtext/htmlの場合
beresp.http.Content-Type ~ “^text/html”

リクエストURLが"/special"で始まる場合
req.url ~ “^/special”

拡張子がjpgまたはpngの場合
req.url.ext ~ “(png|jpg)$”

Conditionsの詳細については以下のサイトを参照して下さい。
https://docs.fastly.com/guides/conditions/using-conditions

200, 203, 300, 301, 302, 404, 410以外のレスポンスコードをキャッシュさせたい場合は上記の設定の他に
Configure -> Content -> Headersにて以下の設定をを追加する必要があります。

Name: Set Cacheable Flag
Type/Action: Cache/Set
Destination: cacheable
Source: true

詳細については以下のページを参照下さい。
https://community.fastly.com/t/caching-http-responses-not-in-fastlys-default-list/449

以上で新しいTTLが対象のオブジェクトに設定されているはずです。

なお、TTLはFastlyサーバーがオリジンサーバーからオブジェクトを取得した際にキャッシュオブジェクトに設定されます。そのため既にFastlyサーバー上にキャッシュがある場合はここでTTLを変更してもすぐに新しいTTLは適用されませんのでご注意下さい。

すぐに新しいTTLを適用したい場合はPurgeを行いキャッシュを削除する必要があります。


FastlyサーバーのTTLの選択ロジック