コンテンツ配信ネットワーク(CDN)は、ユーザーに近いエッジロケーションからコンテンツを 配信します。静的アセットをキャッシュでき、プロバイダーによっては動的トラフィックを プロキシし、TLS を終端し、攻撃をフィルタリングし、接続を最適化できます。オリジンは 権威あるアプリケーションであり続け、CDN は明示的なキャッシュおよびルーティング ポリシーを持つ仲介者です。
ドメインを CDN に接続する #
運用者は https://origin.example.net などのオリジンを設定し、www.example.com 用の
CDN ディストリビューションを作成します。プロバイダーは example.cdnprovider.net
などのホスト名を提供します。運用者はその後、通常は CNAME として www.example.com
をそこへ向ける DNS レコードを作成します。
www.example.com. CNAME example.cdnprovider.net.エッジでは、CDN が要求されたホスト名を使ってディストリビューションを識別し、適切な
Host ヘッダーをオリジンへ転送します。TLS SNI と HTTP の Host ヘッダーが意図した
仮想ホストを識別するため、多数のサイトでエッジ IP アドレスを共有できます。
DNS apex には SOA レコードと NS レコードも保持する必要があるため、通常 CNAME を 含められません。プロバイダーは A/AAAA エイリアス機能、対応している場合の ANAME/ALIAS レコード、または委任 DNS でこれに対応します。正確な動作は DNS プロバイダーによって異なります。
キャッシュ動作を意図的に選択する #
キャッシュキーには通常、ホスト名、パス、選択したクエリパラメーター、選択した リクエストヘッダーまたは Cookie が含まれます。すべての Cookie を含めると キャッシュ効率が失われ、レスポンスを変える値を省略すると、あるユーザーのコンテンツが 別のユーザーに開示される可能性があります。
HTTP キャッシュディレクティブを明示的に設定します。バージョン付きアセットは通常、 長期間キャッシュできます。
Cache-Control: public, max-age=31536000, immutableHTML と個人化されたレスポンスには、より短い有効期間、再検証、または
private/no-store が必要になることがよくあります。パージ操作は例外的な修正に
便利ですが、コンテンツアドレス付きファイル名と予測可能な TTL の方が、日常的な
無効化メカニズムとして信頼できます。
TLS、オリジン、セキュリティ #
CDN 証明書は訪問者向けホスト名を対象にする必要があります。CDN からオリジンへの 通信にも HTTPS を使用し、オリジン証明書を検証し、攻撃者がエッジの制御を迂回できない ようオリジンへのアクセスを制限します。プラットフォームによっては、公開された CDN の送信元範囲へのファイアウォール、相互 TLS、署名付きオリジンリクエストの要求を 意味します。
アクセス判断でクライアントが提供する転送ヘッダーに依存しないでください。CDN が 信頼できるヘッダーを設定するよう構成し、オリジンが CDN からのものだけを受け入れる ようにします。起動前に、認証パス、パージ認可、オリジンタイムアウト、エラー キャッシュのキャッシュルールを確認します。
コメント
GitHub で閲覧・コメントする(投稿にはログインが必要です)