Cloudflare
CloudFlare APIを使用したCloudFlare CDNとの連携機能を提供し、キャッシュクリアとクライアントIP復元を実現します。
cloudflare
概要
CloudFlareモジュールは、CloudFlare APIを使用してCloudFlare CDNサービスとの包括的な連携機能を提供します。DrupalサイトがCloudFlareと通信し、キャッシュ管理と適切なクライアント識別を行えるようにします。
主な機能として、パスによるキャッシュクリア(FreeおよびProfessionalティアに推奨)とタグによるキャッシュクリア(Enterpriseティア専用)、およびCloudFlareがリバースプロキシとして動作する際にマスクされる元のクライアントIPアドレスの復元があります。モジュールはウィザードベースの設定アプローチを採用し、API認証情報とゾーン選択を簡単にセットアップできます。
モジュールにはCloudFlare Purgerサブモジュールが含まれており、DrupalのPurgeモジュールと連携してCloudFlareのAPIを通じた自動キャッシュ無効化を提供します。タグベース、URLベース、フルキャッシュパージをサポートし、組み込みのレート制限保護と診断チェック機能を備えています。
Features
- URLパスによるキャッシュクリア(FreeおよびProfessionalティア)
- キャッシュタグによるキャッシュクリア(Enterpriseティア専用)
- CloudFlareのCF-Connecting-IPヘッダーからの元のクライアントIPアドレスの自動復元
- セキュリティのためのCloudFlare IP範囲に対する受信リクエストの検証
- APIキー/メールとAPIトークン両方の認証方式をサポート
- 複数のCloudFlareゾーンを持つアカウント向けのマルチゾーンサポート
- 選択を容易にする名前によるゾーンフィルタリング
- 認証済みユーザードメインの警告を抑制するバイパスホスト設定
- 最も早い段階でリクエスト処理を行うHTTPミドルウェア
- ハッシュベース圧縮によるCloudFlare互換フォーマットでのキャッシュタグヘッダー生成
- 自動キャッシュ無効化のためのDrupal Purgeモジュールとの連携
- API認証情報、レート制限、日次タグパージ制限の診断チェック
- 特定のタグがヘッダーに含まれないようにするキャッシュタグ除外リスト
Use Cases
コンテンツ更新時のCDNキャッシュ管理
編集者がDrupalでコンテンツを公開または更新すると、Purgeモジュールが自動的にキャッシュ無効化をキューに入れます。CloudFlare Purgerはこれらのキューアイテムを処理し、CloudFlareのAPIにパージリクエストを送信して、手動でキャッシュをクリアすることなく訪問者が新鮮なコンテンツを見られるようにします。
訪問者IPアドレスの復元
CloudFlareがリクエストをプロキシすると、サーバーは訪問者の実際のIPではなくCloudFlareのIPを認識します。「Restore Client Ip Address」を有効にすると、モジュールがCloudFlareのCF-Connecting-IPヘッダーから元の訪問者IPを自動的に復元します。これは正確なアナリティクス、アクセスログ、地理的な機能に不可欠です。
Enterpriseキャッシュタグパージ
CloudFlare Enterpriseのお客様向けに、外科的なキャッシュ無効化のためにタグベースのキャッシュパージを有効にします。特定のノードが更新されると、CDNキャッシュ全体をクリアするのではなく、そのノードのキャッシュタグを含むページのみがパージされます。モジュールはCloudFlareのヘッダーサイズ制限に収めるためにキャッシュタグを自動的にハッシュ化します。
マルチサイトまたはマルチドメイン設定
複数のゾーンを持つCloudFlareアカウントの場合、ゾーン名フィルターを使用して表示されるゾーンを制限し、管理する1つ以上のゾーンを選択します。モジュールは選択されたすべてのゾーンにパージリクエストを送信します。
編集用ドメインの分離
CloudFlareのCookieによる分岐機能を使用できないFreeティアユーザー向けに、CloudFlareをバイパスする別の編集用ドメイン(例:edit.example.com)を設定します。編集者がサイトに直接アクセスした際の警告メッセージを抑制するために、これを「Host to Bypass CloudFlare」として設定します。
Tips
- Freeティアのアカウントではキャッシュタグは機能しません - 代わりにpurge_queuer_urlモジュールを使用したURLベースのパージを使用してください
- CloudFlareがキャッシュ無効化を処理するため、ページキャッシュの最大有効期間を高い値(31536000秒 = 1年)に設定してください
- モジュールはCloudFlare IP範囲を永続的にキャッシュします。CloudFlareがIP範囲を更新した場合はキャッシュをクリアしてください
- /admin/config/development/performance/purgeのPurge UIを使用してパージステータスと診断チェックを監視してください
- キャッシュタグはCloudFlareのヘッダー制限に収めるために4文字の文字列にハッシュ化されます。ハッシュ衝突により時々過剰な無効化が発生する可能性があります
- 高トラフィックイベントでは、意図しないページパージを引き起こす可能性のあるキャッシュタグハッシュ衝突の可能性を考慮してください
- APIトークンは特定の権限でスコープを限定できるため、APIキーよりも推奨されます
Technical Details
Admin Pages 3
/admin/config/services/cloudflare
CloudFlare連携のメイン設定ページ。2段階のウィザードアプローチを使用:最初にAPI認証情報を設定し、次にCloudFlareゾーンを選択します。
/admin/config/services/cloudflare/{step}
設定ウィザードの第2ステップ。アカウントから1つ以上のCloudFlareゾーンを選択します。
/admin/config/services/cloudflare/purger
CloudFlare Purgerのキャッシュタグ除外リストを設定します。
権限 1
Hooks 1
hook_help
hook_help()を実装し、モジュールのヘルプページにヘルプテキストを提供します。
Troubleshooting 8
CloudFlare設定で「Restore Client Ip Address」を有効にしてください。CF-Connecting-IPヘッダーを確認して、リクエストが実際にCloudFlareを経由していることを確認してください。
この警告はモジュールがCloudFlareを期待しているのにリクエストが直接到着した場合に表示されます。編集用ドメイン用のバイパスホストを設定するか、DNS設定がトラフィックをCloudFlare経由でルーティングしていることを確認してください。
これはリクエストにCF-Connecting-IPヘッダーがあるが接続IPがCloudFlareからではないことを示します。これはセキュリティの問題(ヘッダーのなりすまし)か、Kubernetes ingressのような正当な設定の可能性があります。正当な場合は、「Validate remote IP address」を無効にしてください(注意して)。
キャッシュタグパージはCloudFlare Enterpriseプランでのみ利用可能です。FreeおよびProfessionalティアアカウントにはURLベースのパージを使用してください。
CloudFlareはAPI呼び出しを5分あたり1,200リクエストに制限しています。コンテンツ更新をバッチ処理する、適切な間隔でパージキュープロセッサを使用する、高頻度のキャッシュタグをパージから除外するなどして、パージ頻度を減らしてください。
CloudFlare Enterpriseには1日あたり30,000タグパージの制限があります。重要度の低いコンテンツにはURLベースのパージを使用することを検討するか、頻繁に変更されるが重要度の低いタグにはキャッシュタグ除外リストを実装してください。
このバグは最近のバージョンで修正されました。ゾーンページネーションの問題を解決するには、最新のモジュールバージョンに更新してください。
API認証情報にゾーンへのアクセス権限があることを確認してください。APIトークンの場合、トークンに「Zone:Read」権限があることを確認してください。CloudFlareのコンソールにアクセスしてゾーンが存在することを確認してください。
Security Notes 5
- API認証情報(キー/メールまたはトークン)はDrupal設定に保存されます。設定エクスポートが適切に保護され、公開リポジトリにコミットされないようにしてください。
- 「administer cloudflare」権限は、機密性の高いAPI認証情報へのアクセスのため、制限付きとしてマークされています。
- 「Validate remote IP address」が無効の場合、モジュールはリクエスト元を検証せずにCF-Connecting-IPヘッダーを信頼します。リクエストがCloudFlareをバイパスできる場合、IPスプーフィングが可能になる可能性があります。
- モジュールはhttps://www.cloudflare.com/ips-v4とips-v6からCloudFlareのIP範囲を取得します。アウトバウンドHTTPアクセスが利用可能であることを確認してください。
- スコープ制限によるセキュリティ向上のため、APIキーの代わりにCloudFlare APIトークンの使用を検討してください。