キャッシュルールは、Sudunがエッジサーバーからコンテンツをキャッシュおよび提供する方法を定義します。適切に設定されたキャッシュルールは、パフォーマンスを向上させ、オリジンサーバーの負荷を軽減し、ユーザーエクスペリエンスを向上させます。
リクエスト → エッジサーバー → キャッシュチェック
│
┌───────┴───────┐
│ │
キャッシュヒット キャッシュミス
│ │
キャッシュ済み オリジンから取得
コンテンツを返す レスポンスをキャッシュ
ユーザーに返す
デフォルトでは、Sudunは以下の基準でコンテンツをキャッシュします:
| コンテンツタイプ | デフォルトTTL | キャッシュ可能 |
|---|---|---|
| 画像 (jpg, png, gif, webp) | 1日 | はい |
| CSS, JavaScript | 1日 | はい |
| フォント (woff, woff2, ttf) | 1日 | はい |
| HTML | キャッシュしない | いいえ |
| APIレスポンス | キャッシュしない | いいえ |
| 構成要素 | 説明 | 例 |
|---|---|---|
| マッチ条件 | リクエストを一致させる条件 | URLパス、ファイル拡張子 |
| キャッシュアクション | 一致したリクエストの処理方法 | キャッシュ、バイパス、上書き |
| TTL | キャッシュの生存時間 | 3600 (1時間) |
# 完全一致
/images/logo.png
# プレフィックス一致
/static/*
# ワイルドカード一致
/api/*/public
# 正規表現一致 (上級者向け)
^/blog/[0-9]{4}/.*$
ファイルタイプによるキャッシュ:
{
"match": {
"file_extension": ["jpg", "jpeg", "png", "gif", "webp", "css", "js"]
},
"action": "cache",
"ttl": 86400
}
{
"match": {
"path": "/search",
"query_string": {
"contains": "category"
}
}
}
{
"match": {
"headers": {
"Accept": "application/json"
}
},
"action": "bypass"
}
コンテンツをエッジサーバーに保存:
{
"match": { "path": "/static/*" },
"action": "cache",
"ttl": 604800,
"settings": {
"browser_ttl": 86400,
"serve_stale": true
}
}
常にオリジンから取得:
{
"match": { "path": "/api/*" },
"action": "bypass"
}
オリジンのキャッシュヘッダーを無視:
{
"match": { "path": "/assets/*" },
"action": "override",
"ttl": 2592000,
"ignore_origin_headers": true
}
コンテンツがエッジサーバーにキャッシュされる期間:
| 値 | 期間 | 使用例 |
|---|---|---|
| 60 | 1分 | 頻繁に更新されるコンテンツ |
| 3600 | 1時間 | 半動的コンテンツ |
| 86400 | 1日 | 静的アセット |
| 604800 | 1週間 | ほとんど変更されないコンテンツ |
| 2592000 | 30日 | バージョン管理されたアセット |
ブラウザがコンテンツをローカルにキャッシュする期間:
{
"edge_ttl": 86400,
"browser_ttl": 3600
}
ヒント: キャッシュ無効化の制御を維持するため、ブラウザTTLはエッジTTLより短く設定してください。
キャッシュキーは、キャッシュされたオブジェクトを一意にする要素を決定します。
https://example.com/page?sort=date&page=1
│ │ │
スキーム パス クエリ文字列
| オプション | 動作 |
|---|---|
| すべて含める | すべてのクエリパラメータでキャッシュが変わる |
| すべて除外 | キャッシュではクエリ文字列を無視 |
| 特定のものを含める | 指定されたパラメータのみがキャッシュに影響 |
| 特定のものを除外 | 指定されたパラメータを無視 |
例: 特定のパラメータを含める
{
"cache_key": {
"query_string": {
"include": ["category", "page"]
}
}
}
リクエストヘッダーによってキャッシュを変える:
{
"cache_key": {
"headers": ["Accept-Language", "Accept-Encoding"]
}
}
クッキーによってキャッシュを変える(控えめに使用):
{
"cache_key": {
"cookies": ["session_type", "user_tier"]
}
}
新鮮なコンテンツを取得中にキャッシュされたコンテンツを提供:
{
"serve_stale": {
"while_revalidate": true,
"on_error": true,
"max_stale_age": 86400
}
}
オリジンが失敗した場合に古いコンテンツを提供:
オリジンエラー (5xx) → 古いコンテンツを提供 → エラーを記録
デフォルトでは、Sudunは以下のオリジンヘッダーを尊重します:
| ヘッダー | 動作 |
|---|---|
| Cache-Control: max-age=X | X秒間キャッシュ |
| Cache-Control: no-cache | 提供前に再検証 |
| Cache-Control: no-store | キャッシュしない |
| Cache-Control: private | エッジでキャッシュしない |
| Expires | 指定日時までキャッシュ |
| ETag | 条件付きリクエストを有効化 |
オリジンヘッダーに関わらず強制的にキャッシュ:
{
"match": { "path": "/static/*" },
"action": "cache",
"ttl": 86400,
"respect_origin_headers": false
}
ルールは順番に評価され、最初に一致したルールが適用されます:
ルール1: /api/* → バイパス (優先度: 1)
ルール2: /api/public/* → キャッシュ (優先度: 2)
ルール3: /* → キャッシュ (優先度: 3)
リクエスト: /api/users → ルール1に一致 → バイパス
リクエスト: /api/public/data → ルール1に一致 → バイパス (ルール2ではありません!)
重要: 具体的なルールを一般的なルールの前に配置してください。
{
"name": "静的アセット",
"match": {
"file_extension": ["css", "js", "jpg", "png", "gif", "ico", "woff2"]
},
"action": "cache",
"ttl": 2592000,
"browser_ttl": 86400
}
{
"name": "APIバイパス",
"match": { "path": "/api/*" },
"action": "bypass"
}
{
"name": "HTMLページ",
"match": {
"file_extension": ["html"],
"path": "/*"
},
"action": "cache",
"ttl": 300,
"serve_stale": true
}
{
"name": "バージョン管理アセット",
"match": {
"path": "/assets/v*/*"
},
"action": "cache",
"ttl": 31536000,
"immutable": true
}
X-Cache-Statusレスポンスヘッダーを確認:
| ステータス | 意味 |
|---|---|
| HIT | キャッシュから提供 |
| MISS | オリジンから取得 |
| BYPASS | キャッシュがバイパスされた |
| EXPIRED | キャッシュ期限切れ、再検証中 |
| STALE | 古いコンテンツを提供 |
# キャッシュステータスを確認
curl -I https://example.com/static/style.css
# レスポンスヘッダー
X-Cache-Status: HIT
Cache-Control: max-age=86400
Age: 3600
API経由でキャッシュルールを管理:
# キャッシュルールを一覧表示
curl -X GET https://api.Sudun.com/v1/domains/example.com/cache-rules \
-H "Authorization: Bearer YOUR_API_KEY"
# キャッシュルールを作成
curl -X POST https://api.yeSudunom/v1/domains/example.com/cache-rules \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "静的アセット",
"match": {"file_extension": ["css", "js", "png"]},
"action": "cache",
"ttl": 86400
}'
キャッシュルールについてお困りですか? support@Sudun.com までご連絡ください