キャッシュとパージ
エッジキャッシュ、ブラウザーキャッシュ、キャッシュキー、ネガティブキャッシュを設定し、URL、ワイルドカード、またはサイト全体を指定してパージします。
キャッシュ設定は、サイトの詳細ページ(/cdn/domains/<domain>/cache)の キャッシュタブにあります。設定はサイト内のすべてのホスト名に適用されます。変更後は、ページ下部の 設定を保存をクリックしてください。新しいコンテンツをすぐに反映するには、右上の キャッシュを削除を使用します。
エッジキャッシュ
| 設定 | 説明 |
|---|---|
| エッジキャッシュ | 自動: オリジンのレスポンスヘッダーに基づいてキャッシュします。有効化: キャッシュを有効にします。無効化: エッジにキャッシュしません。 |
| オリジン障害時に期限切れキャッシュを返す | オリジンがタイムアウトするか、500/502/503/504 を返す場合、エッジはエラーページの代わりに期限切れのキャッシュを配信します。デフォルトで有効です。 |
| キャッシュ保持期間モード | キャッシュの有効期間の決定方法です。次の表を参照してください。 |
| キャッシュ保持期間 | TTL モードで使用する設定値です。ショートカットボタンで 1 hour、1 day、7 days を設定できます。 |
キャッシュ TTL モード:
| モード | 動作 |
|---|---|
| オリジンまたはデフォルトに従う | オリジンの Cache-Control / Expires ヘッダーの有効期間を使用します。オリジンが指定しない場合は、設定値を使用します。 |
| 固定 | オリジンの指定を無視し、常に設定値を使用します。 |
| オリジンに従う | オリジンの指定に厳密に従います。オリジンがレスポンスをキャッシュ可能と指定していない場合は、キャッシュしません。 |
| 最小値を使用 / 最大値を使用 | オリジンの有効期間と設定値のうち、小さい方または大きい方を使用します。オリジンが指定しない場合は、設定値を使用します。 |
ファイルタイプ別のキャッシュ
ファイルの種類ごとにキャッシュでは、拡張子ごとに有効期間を設定できます。たとえば、jpg,png,gif に 7 days を設定できます。エッジは、オリジンのレスポンスに 有効期間の明示的な指定がない 場合(max-age、s-maxage、Expires がない場合)に、この設定を適用します。オリジンが指定している場合は、オリジンの値が優先されます。
キャッシュされないレスポンス
次のレスポンスは、設定にかかわらずエッジキャッシュに保存されません。
- オリジンからの
Cache-Control: no-storeまたはprivateを含むレスポンス - Cookie を設定するレスポンス(
Set-Cookie) - Range リクエストに対する
206 Partial Contentレスポンス - GET と HEAD 以外のメソッドによるリクエスト
ブラウザーキャッシュ
ブラウザーキャッシュでは、エッジがブラウザー向けの Cache-Control ヘッダーを追加するかどうかを制御します。
- 有効化: エッジが実際にキャッシュしたレスポンスに対して、オリジンが
Cache-Controlを送信していない場合に、エッジがCache-Control: public, max-age=<edge TTL>を追加します。エッジ TTL は、エッジ自体がレスポンスを保持する期間なので、ブラウザーの有効期間もエッジと一致します。 - 自動または 無効化: エッジはブラウザーキャッシュ用のヘッダーを追加しません。
オリジン自身の Cache-Control は、常にそのままブラウザーに渡されます。エッジは、次のいずれに対してもブラウザーキャッシュ用のヘッダーを追加しません。
- 動的 API など、エッジがキャッシュしていないレスポンス
- GET と HEAD 以外のメソッドによるリクエスト
- ステータスコードが 400 以上のレスポンス
- Cookie を設定するレスポンス
これにより、動的コンテンツがブラウザーキャッシュに残り続けることを防ぎます。
静的アセットのブラウザーでの有効期間を長くする最も確実な方法は、オリジンから明示的に Cache-Control: max-age=... を送信することです。
キャッシュキー
キャッシュキーは、どのリクエストが同じキャッシュを共有するかを決定します。このセクション下部のプレビューには、現在の設定でのキーの構成が表示されます。
クエリ文字列の処理モード:
| モード | 動作 | 例 |
|---|---|---|
| 標準 | すべてのクエリパラメーターをそのまま保持します | ?a=3 と ?a=4 は別々にキャッシュされます |
| 無視 | すべてのクエリパラメーターを無視します | ?a=3 と ?a=4 は同じキャッシュを共有します |
| 並べ替え | すべてのパラメーターを保持し、名前順に並べ替えます | ?b=2&a=1 と ?a=1&b=2 は同じキャッシュを共有します |
| ホワイトリスト | 指定したパラメーターのみ保持します | id,page |
| ブラックリスト | 指定したパラメーターを除外します | utm_source,utm_medium,ref |
パラメーター名はカンマで区切ってください。
次の条件でもキャッシュを分割できます。
- デバイスの種類ごとに区別: モバイルとデスクトップでキャッシュを分けます。
- 国ごとに区別: 訪問者の国または地域ごとにキャッシュを分けます。
- 言語ごとに区別:
Accept-Languageごとにキャッシュを分けます。 - キャッシュホストモード: キーに含めるホスト名を指定します。
- 元のリクエスト: 訪問者がリクエストした Host です。デフォルトの設定です。
- 解析後: サイトに一致したホスト名です。
- Host ヘッダー: オリジンへのリクエストで使用する Host です。
条件を追加するたびに、一つの URL が複数のキャッシュに分割され、キャッシュヒット率が低下する場合があります。必要な条件だけを有効にしてください。
高度なキャッシュ設定とネガティブキャッシュ
| 設定 | 説明 |
|---|---|
| ステータスコードごとにキャッシュ(ネガティブキャッシュ) | 404 や 301 など、特定のステータスコードに対するキャッシュの有効期間を秒単位で指定します。他のすべての TTL 設定より優先され、エラーレスポンスによってオリジンへのアクセスが繰り返されることを防ぎます。 |
| min_ttl / 最大キャッシュ時間(max_ttl) | 最終的なキャッシュの有効期間の下限と上限です。0 は制限なしを意味します。 |
| 障害時の猶予期間(stale_if_error) | オリジン障害時に、期限切れコンテンツの配信を継続する秒数です。 |
| Authorization がある場合はキャッシュしない | Authorization ヘッダーを持つリクエストは、キャッシュをバイパスしてオリジンに送られます。 |
| クライアントの no-cache に従う | Cache-Control: no-cache を持つリクエストは、キャッシュをバイパスします。 |
| キャッシュをバイパスするセッション Cookie | session や token など、指定した Cookie のいずれかを持つリクエストは、キャッシュをバイパスします。 |
オリジンの保護(Origin Shield)
オリジンへの最大同時接続数では、一つのサイトからオリジンへ同時に送信できる処理中のリクエスト数を制限します。0 は制限なしを意味します。
上限を超えると、**上限超過時のアクション(段階別)**で指定した処理が順に適用されます。
- cache_first: キャッシュから配信します。
- queue: キューで待機します。キューの長さと最大待機時間(ミリ秒)を設定します。
- challenge: 人間による操作を確認するチャレンジを表示します。
- block: リクエストをブロックし、設定した Retry-After の時間を返します。
処理能力に限りがあるオリジンを保護するために使用します。
キャッシュのパージ
キャッシュ設定を変更しても、すでにキャッシュされているコンテンツは失効しません。エッジがオリジンから最新のコンテンツを取得するようにするには、次の操作を行います。
- キャッシュ タブで、右上の キャッシュを削除をクリックします。ドメイン 一覧と 概要 タブでも、ワンクリックでサイト全体をパージできます。
- パージの種類を選択します。
- サイト全体のキャッシュを削除: サイトのキャッシュ済みコンテンツをすべて削除します。
- URL を指定して削除: 1 行に一つずつ URL を入力します。完全な URL(
https://example.com/css/app.css)またはパス(/css/app.css)を使用できます。
- 削除するをクリックします。
URL によるパージの照合方法:
- クエリ文字列がある場合(例:
/list?page=2): そのパラメーターの組み合わせのキャッシュのみをパージします。クエリは、照合前にサイトのクエリ文字列モードに従って正規化されます。 - クエリ文字列がない場合(例:
/list): そのパスのすべてのクエリ文字列のバリエーションをパージします。 - ワイルドカード: パターンでパージするには、
*を含む行を一つだけ指定します。たとえば、https://example.com/static/*は、そのディレクトリ配下のすべてを対象にします。*を含む行が複数ある場合は、サイト全体のパージになります。
パージはバックグラウンドですべてのエッジノードに配信され、通常は数秒で完了します。その後、curl -I でレスポンスヘッダーの X-Cache-Status を確認してください。最初のリクエストでは MISS と表示されるはずです。
サイト全体のパージ直後は、すべてのリクエストがオリジンに送られるため、オリジンの負荷が大幅に増加します。変更したファイルが少数であれば、それらの URL を指定してパージしてください。