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