キャッシュポリシーは、ドメイン全体に適用できる高レベルのキャッシュ戦略を定義します。ポリシーは複数のキャッシュ設定を再利用可能な構成にまとめることで、キャッシュ動作を一貫して管理しやすくします。
キャッシュポリシーは、以下を指定する名前付き構成です:
キャッシュポリシー「静的アセット」
├── TTL: 30日
├── ブラウザTTL: 1日
├── キャッシュキー: URL + Accept-Encoding
├── 圧縮: Brotli, Gzip
└── 古いキャッシュを提供: 有効
Sudunには一般的なユースケース向けの事前設定済みポリシーが含まれています:
一般的なウェブサイト向けのバランスの取れたキャッシュ:
| 設定 | 値 |
|---|---|
| エッジTTL | オリジンヘッダーを尊重 |
| ブラウザTTL | オリジンヘッダーを尊重 |
| キャッシュキー | URL + クエリ文字列 |
| 圧縮 | 自動 |
| 古いキャッシュを提供 | エラー時のみ |
静的コンテンツ向けの最大限のキャッシュ:
| 設定 | 値 |
|---|---|
| エッジTTL | 30日 |
| ブラウザTTL | 7日 |
| キャッシュキー | URLのみ |
| 圧縮 | 常に |
| 古いキャッシュを提供 | 常に |
動的コンテンツ向けの最小限のキャッシュ:
| 設定 | 値 |
|---|---|
| エッジTTL | なし |
| ブラウザTTL | なし |
| キャッシュキー | N/A |
| 圧縮 | オンザフライ |
| 古いキャッシュを提供 | なし |
{
"name": "my-static-policy",
"description": "静的アセット用ポリシー",
"settings": {
"cache": {
"edge_ttl": 2592000,
"browser_ttl": 86400,
"respect_origin": false
},
"cache_key": {
"include_query_string": false,
"include_headers": ["Accept-Encoding"]
},
"optimization": {
"compression": "auto",
"minify": false
},
"stale": {
"serve_while_revalidate": true,
"serve_on_error": true,
"max_stale_age": 86400
}
}
}
キャッシュ期間を制御:
| 設定 | 説明 | 範囲 |
|---|---|---|
| edge_ttl | エッジでのキャッシュ時間 | 0 - 31536000 (1年) |
| browser_ttl | ブラウザでのキャッシュ時間 | 0 - 31536000 |
| respect_origin | オリジンヘッダーを尊重 | true/false |
| min_ttl | 最小キャッシュ時間 | 0 - 86400 |
| max_ttl | 最大キャッシュ時間 | 0 - 31536000 |
TTL階層:
respect_origin = trueの場合:
TTL = オリジンCache-Control(min/max範囲内)
respect_origin = falseの場合:
TTL = edge_ttl設定
キャッシュされたコンテンツの一意性を定義:
{
"cache_key": {
"include_query_string": true,
"query_string_whitelist": ["page", "sort"],
"query_string_blacklist": ["utm_*", "fbclid"],
"include_headers": ["Accept-Encoding", "Accept-Language"],
"include_cookies": [],
"include_device_type": false,
"include_geo": false
}
}
キャッシュキーオプション:
| オプション | 効果 |
|---|---|
| include_query_string | クエリパラメータでキャッシュを変動 |
| query_string_whitelist | これらのパラメータのみがキャッシュに影響 |
| query_string_blacklist | これらのパラメータを無視 |
| include_headers | リクエストヘッダーでキャッシュを変動 |
| include_cookies | クッキーでキャッシュを変動 |
| include_device_type | モバイル/デスクトップキャッシュを分離 |
| include_geo | 国別にキャッシュを分離 |
コンテンツ圧縮を構成:
{
"compression": {
"mode": "auto",
"algorithms": ["br", "gzip", "deflate"],
"min_size": 1024,
"types": ["text/*", "application/json", "application/javascript"]
}
}
圧縮モード:
| モード | 動作 |
|---|---|
| auto | コンテンツタイプとサイズに基づいて圧縮 |
| always | 常に対象コンテンツを圧縮 |
| never | 圧縮を無効化 |
| origin | オリジン圧縮のみを使用 |
古いコンテンツの動作を設定:
{
"stale": {
"serve_while_revalidate": true,
"serve_on_error": true,
"max_stale_age": 86400,
"error_codes": [500, 502, 503, 504]
}
}
特定のパスにポリシーを割り当て:
{
"policy_assignments": [
{
"policy": "aggressive-static",
"match": {
"path": "/static/*"
}
},
{
"policy": "dynamic",
"match": {
"path": "/api/*"
}
}
]
}
ファイル拡張子でポリシーを割り当て:
{
"policy": "aggressive-static",
"match": {
"file_extensions": ["css", "js", "jpg", "png", "woff2"]
}
}
レスポンスのコンテンツタイプでポリシーを割り当て:
{
"policy": "standard",
"match": {
"content_type": ["text/html", "application/xhtml+xml"]
}
}
ポリシーは他のポリシーから継承可能:
{
"name": "my-images-policy",
"inherits": "aggressive-static",
"overrides": {
"cache": {
"browser_ttl": 604800
},
"optimization": {
"image_optimization": true
}
}
}
継承チェーン:
ベースポリシー: aggressive-static
└── my-images-policy (継承 + browser_ttlを上書き)
└── my-hero-images (継承 + 画像品質を上書き)
ポリシーの変更を経時的に追跡:
{
"name": "static-assets",
"version": 3,
"created_at": "2024-01-01T00:00:00Z",
"updated_at": "2024-01-15T10:30:00Z",
"changelog": [
{
"version": 3,
"date": "2024-01-15",
"changes": "ブラウザTTLを7日に延長"
},
{
"version": 2,
"date": "2024-01-10",
"changes": "Brotli圧縮を追加"
}
]
}
以前のポリシーバージョンに戻す:
デプロイ前にポリシー変更をテスト:
{
"preview": true,
"test_urls": [
"https://example.com/test-page",
"https://example.com/static/test.css"
]
}
ポリシーの効果をテスト:
{
"ab_test": {
"enabled": true,
"variants": [
{
"name": "control",
"policy": "current-policy",
"weight": 50
},
{
"name": "experiment",
"policy": "new-policy",
"weight": 50
}
],
"metrics": ["cache_hit_ratio", "origin_requests", "ttfb"]
}
}
{
"name": "product-pages",
"settings": {
"cache": {
"edge_ttl": 3600,
"browser_ttl": 300
},
"cache_key": {
"include_query_string": true,
"query_string_whitelist": ["variant", "color", "size"]
},
"stale": {
"serve_while_revalidate": true,
"max_stale_age": 3600
}
}
}
{
"name": "blog-content",
"settings": {
"cache": {
"edge_ttl": 600,
"browser_ttl": 60
},
"stale": {
"serve_while_revalidate": true,
"serve_on_error": true
}
}
}
{
"name": "api-cacheable",
"settings": {
"cache": {
"edge_ttl": 60,
"browser_ttl": 0,
"respect_origin": true
},
"cache_key": {
"include_query_string": true,
"include_headers": ["Authorization"]
}
}
}
{
"name": "immutable-assets",
"settings": {
"cache": {
"edge_ttl": 31536000,
"browser_ttl": 31536000,
"immutable": true
},
"cache_key": {
"include_query_string": false
}
}
}
ポリシーのパフォーマンス指標を表示:
| 指標 | 説明 |
|---|---|
| キャッシュヒット率 | キャッシュから提供されたリクエストの割合 |
| オリジンオフロード | オリジンリクエストの削減率 |
| 帯域幅節約量 | キャッシュから提供されたデータ量 |
| 平均TTL | コンテンツがキャッシュに保持される平均時間 |
curl -X POST https://api.Sudun.com/v1/domains/example.com/policies \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "my-policy",
"settings": {
"cache": {"edge_ttl": 86400},
"compression": {"mode": "auto"}
}
}'
curl -X PUT https://api.Sudun.com/v1/domains/example.com/policies/my-policy \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"settings": {
"cache": {"edge_ttl": 172800}
}
}'
curl -X GET https://api.Sudun.com/v1/domains/example.com/policies \
-H "Authorization: Bearer YOUR_API_KEY"
キャッシュポリシーについてお困りですか? support@Sudun.com までお問い合わせください