2026年5月20日
2026年5月20日
WordPressのCDNを設定する方法(Cloudflare対応)
はじめに
CloudflareはCDN・DDoS防御・SSL・WAFを無料で提供するサービスです。DNSをCloudflareに向けるだけでコンテンツを世界中のエッジサーバーから配信でき、日本国内のユーザーにも最寄りのサーバーからコンテンツが届くようになります。
症状・原因
- 海外からのアクセスが遅い
- DDoS攻撃を受けてサイトがダウンした
- 画像などの静的ファイルのダウンロードが遅い
- SSL証明書の管理が面倒
解決手順
ステップ1:Cloudflareにサインアップしてドメインを追加する
1. https://www.cloudflare.com/ でアカウント作成
2. 「サイトを追加」でドメインを入力
3. プラン選択(Free プランで基本機能は十分)
4. 既存のDNSレコードが自動スキャンされる
5. Cloudflareが提供するネームサーバーを確認
# ドメインレジストラでネームサーバーを変更
# Cloudflareから提供されるNSレコードに変更例:
# NS: aicha.ns.cloudflare.com
# NS: brendon.ns.cloudflare.com
# 変更後の確認(反映に数時間かかる場合あり)
dig NS example.com +short
# → cloudflareのネームサーバーが返ればOK
ステップ2:SSL/TLSモードを設定する
Cloudflareダッシュボード → SSL/TLS → 概要
推奨設定:
- 「フル(厳格)」: サーバーに有効なSSL証明書がある場合(最も安全)
- 「フル」: 自己署名証明書の場合
- 「柔軟」: サーバーにSSLがない場合(WordPressの管理画面が壊れる可能性あり)
※ Wordressサイトでは「フル(厳格)」を推奨
「柔軟」にするとログインループが発生することがある
// wp-config.php: Cloudflare経由のSSLを正しく認識させる
// Cloudflareは80番ポートでサーバーと通信し、ユーザーにはHTTPSを提供する
// WordPressがHTTPと認識してしまう場合に設定
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
$_SERVER['HTTPS'] = 'on';
}
define('WP_HOME', 'https://example.com');
define('WP_SITEURL', 'https://example.com');
ステップ3:Cloudflareのキャッシュルールを設定する
Cloudflareダッシュボード → キャッシュ → キャッシュルール
ルール1: WordPressの管理画面・ログインをキャッシュしない
一致条件: URI パス → 次と一致する: /wp-admin/*
OR Cookie → 名前が次と一致する: wordpress_logged_in_*
設定: キャッシュ対象外
ルール2: 静的ファイルをキャッシュ
一致条件: ファイル拡張子 → 次と一致する: jpg, jpeg, png, gif, webp, css, js
設定: キャッシュあり + エッジTTL: 30日
ステップ4:WordPress側でCloudflareと連携する
// functions.php
// Cloudflareが付与するCFヘッダーを使ってIPを取得
function mytheme_get_real_ip(): string {
// Cloudflare経由のリクエストは CF-Connecting-IP ヘッダーにIPが入る
if (!empty($_SERVER['HTTP_CF_CONNECTING_IP'])) {
return sanitize_text_field($_SERVER['HTTP_CF_CONNECTING_IP']);
}
return sanitize_text_field($_SERVER['REMOTE_ADDR'] ?? '');
}
// Cloudflare Workers KVでキャッシュパージのWebhookを受け取る
function mytheme_cloudflare_purge_on_save(int $post_id): void {
if (wp_is_post_revision($post_id)) {
return;
}
$cf_zone_id = defined('CF_ZONE_ID') ? CF_ZONE_ID : '';
$cf_api_key = defined('CF_API_KEY') ? CF_API_KEY : '';
if (!$cf_zone_id || !$cf_api_key) {
return;
}
$url = get_permalink($post_id);
// Cloudflare API でURLのキャッシュをパージ
wp_remote_post(
"https://api.cloudflare.com/client/v4/zones/{$cf_zone_id}/purge_cache",
[
'headers' => [
'Authorization' => 'Bearer ' . $cf_api_key,
'Content-Type' => 'application/json',
],
'body' => wp_json_encode(['files' => [$url, home_url('/')]]),
'timeout' => 10,
]
);
}
add_action('save_post', 'mytheme_cloudflare_purge_on_save');
// wp-config.php: Cloudflare APIキーを安全に管理
define('CF_ZONE_ID', 'your-zone-id-here');
define('CF_API_KEY', 'your-api-token-here');
ステップ5:Cloudflareの推奨設定を有効化する
ダッシュボードで確認・設定する項目:
速度 → 最適化:
✅ Auto Minify(HTML・CSS・JS)
✅ Brotli圧縮
✅ Rocket Loaderは慎重に(JS実行順序が変わる場合あり)
セキュリティ:
✅ セキュリティレベル: 中(デフォルト)
✅ Bot Fight Mode
✅ HTTPS Always Redirect
ネットワーク:
✅ HTTP/2
✅ HTTP/3(QUIC)
✅ 0-RTT Connection Resumption
注意事項
- Cloudflareの「柔軟」SSLモードはWordPressのログインループを引き起こす既知の問題があります。必ず「フル」または「フル(厳格)」を使用してください
- Rocket Loaderを有効にするとJavaScriptの読み込み順序が変わるため、プラグインが動作しなくなることがあります。有効化前に十分にテストしてください
- Cloudflare Proプラン以上でポーリッシュ(画像の自動最適化)が利用可能です
まとめ
CloudflareはDNSを変更するだけで導入でき、SSL・CDN・DDoS防御が一括で利用できます。WordPressではSSLモードを「フル(厳格)」に設定し、HTTP_X_FORWARDED_PROTO ヘッダーを確認して正しくHTTPSと認識させます。投稿更新時は Cloudflare API でキャッシュをパージして最新コンテンツを確実に配信します。