CDN導入の注意点
a-blog cms で構築されたサイトの前段に CDN を配置することは可能です。ただし、CDN を挟むことで a-blog cms 側にいくつかの設定対応が必要になります。
CDN サービス固有の設定手順は各サービスのドキュメントを参照してください。本ドキュメントは a-blog cms 側で必要な設定と注意点をまとめたものです。
1. 接続元 IP アドレスの取得設定
CDN を経由すると、そのままでは接続元 IP がすべて CDN のものになります。正しい IP が取得できないと、以下の機能が期待通りに動作しません。
ログイン制限・不正ログイン対策
IP アクセス制限
各種ログ記録(監査ログなど)
設定方法
/config.server.php で以下の定数を設定します。
// CDN が実クライアント IP を渡すヘッダー名(HTTP_ プレフィックス付き)
define('PROXY_IP_HEADER', 'HTTP_TRUE_CLIENT_IP');
// 信頼するプロキシの IP アドレス(カンマ区切り)
define('TRUSTED_PROXY_LIST', '192.0.2.10,198.51.100.20');PROXY_IP_HEADER のデフォルト値は HTTP_X_FORWARDED_FOR です。CDN が実 IP を渡すヘッダー名に合わせて変更してください。
TRUSTED_PROXY_LIST に CDN のオリジン接続元 IP を登録すると、X-Forwarded-For ヘッダーのチェーンから信頼できるプロキシ IP を除外して実クライアント IP を特定します。CDN サービスによっては、オリジンへの接続元 IP を固定・公開している場合があります。その IP を TRUSTED_PROXY_LIST に登録することで、実 IP の特定に加え、CDN を経由しないオリジンへの直接アクセスをサーバー側で制限することも安全に行えます。
2. キャッシュ制御(情報漏えい防止)
管理画面・ログイン中の会員ページ・プレビュー・フォーム送信などをキャッシュしてしまうと、会員向けコンテンツや個人情報が別のユーザーに配信される危険があります。
ログイン判定用 Cookie の活用
a-blog cms には、ログイン中のユーザーにのみ発行される専用 Cookie が用意されています(CDN でのキャッシュ出し分けを想定した機能です)。
/private/config.system.yaml で有効化します。
extra_logged_in_cookie: on
extra_logged_in_cookie_name: acms-logged-in # 任意で変更可能この Cookie の有無を条件にキャッシュをバイパスするよう CDN 側を設定してください。
セッション Cookie(config.server.php の SESSION_NAME で変更可能)は未ログインの訪問者にも付与される場合があるため、これをキャッシュバイパス条件にすると公開ページもキャッシュされなくなり、CDN の効果が薄れます。ログイン判定には上記の専用 Cookie を使用してください。
POST リクエストのバイパス
フォーム送信などの POST リクエストは必ずキャッシュをバイパスする設定にしてください。
3. HTTPS・プロトコル判定(CDN でSSL を終端する場合)
CDN のエッジで SSL を終端し、オリジン(a-blog cms)へ HTTP で接続する構成では、a-blog cms が正しく HTTPS と判定できるよう対応が必要です。
a-blog cms は以下の順序でプロトコルを判定します。
1. $_SERVER['HTTPS'] が存在する
2. $_SERVER['SERVER_PORT'] が 443 である
3. $_SERVER['HTTP_X_FORWARDED_PROTO'] が https である
CDN 側で X-Forwarded-Proto: https ヘッダーをオリジンへ転送するよう設定することで、a-blog cms が HTTPS として動作します。この設定が漏れると、管理画面やログインページで HTTP へリダイレクトされるなどの問題が発生することがあります。
4. キャッシュのパージ運用
コンテンツを公開・更新したときに、CDN に古いキャッシュが残ったままにならないよう、パージ(キャッシュ消去)の運用を設計してください。
5. WAF によるリクエストブロック
CDN の WAF(Web Application Firewall)を有効にしている場合、a-blog cms の正常な操作がブロックされることがあります。
以下はブロックされやすい操作の例です。
管理画面での HTML を含むコンテンツ編集
ファイル・画像のアップロード
リッチエディタやブロックエディタからの POST
フォーム送信
対処としては、管理画面の URL パス(例: /bid/admin/ など)を WAF ルールの除外対象に設定することが一般的です。WAF のルールチューニングは CDN サービス側での対応となります。
設定項目の一覧
設定ファイル | 項目 | デフォルト値 |
|---|---|---|
config.server.php | PROXY_IP_HEADER | HTTP_X_FORWARDED_FOR |
config.server.php | TRUSTED_PROXY_LIST | (空) |
private/config.system.yaml | extra_logged_in_cookie | off |
private/config.system.yaml | extra_logged_in_cookie_name | acms-logged-in |