WordPressのインストールは通常、簡単な作業です。しかし、企業レベルのWebサーバー環境では、CDNやプロキシサーバーが絡むことで予想外の問題が発生することがあります。

今回は、実際に遭遇したAkamai CDN環境でのWordPressインストール問題と、それを診断・解決するプロセスを詳しく紹介します。

発生した問題

症状

  • WordPressインストール先:https://example.com/subdirectory/wp/
  • 内部ネットワークからのアクセス:正常に表示
  • 外部ネットワークからのアクセスERR_TOO_MANY_REDIRECTSエラー

このような症状は、プロキシやCDN環境でよく見られる典型的な問題です。

初期の推測

リダイレクトループが発生していることから、以下を疑いました:

  1. HTTPS/HTTP判定の問題
  2. wp-config.phpのURL設定不備
  3. .htaccessファイルの設定競合

診断アプローチ:環境の可視化

debug-headers.phpの作成

問題の根本原因を特定するため、サーバー環境を詳しく調査できる診断ファイルを作成しました:

<?php
/**
 * サーバー環境診断ファイル
 */
echo "<h1>サーバーヘッダー診断</h1>";
echo "<h2>アクセス元: " . $_SERVER['REMOTE_ADDR'] . "</h2>";

// 重要なサーバー変数を表示
$important_vars = [
    'HTTP_HOST',
    'HTTP_X_FORWARDED_HOST',
    'HTTP_X_FORWARDED_PROTO', 
    'HTTP_X_FORWARDED_FOR',
    'HTTPS',
    'SERVER_PORT',
    'REQUEST_URI'
];

echo "<table border='1'>";
foreach ($important_vars as $var) {
    $value = isset($_SERVER[$var]) ? $_SERVER[$var] : '(未設定)';
    echo "<tr><td>{$var}</td><td>" . htmlspecialchars($value) . "</td></tr>";
}
echo "</table>";

// すべてのHTTPヘッダーを表示
echo "<h3>すべてのHTTPヘッダー</h3>";
foreach ($_SERVER as $key => $value) {
    if (strpos($key, 'HTTP_') === 0) {
        echo "<tr><td>{$key}</td><td>" . htmlspecialchars($value) . "</td></tr>";
    }
}
?>

診断結果の比較

内部アクセス時:

HTTP_HOST: 192.168.1.100
HTTP_X_FORWARDED_HOST: example.com
HTTP_X_FORWARDED_PROTO: (未設定)
HTTP_X_FORWARDED_FOR: 192.168.1.200
HTTPS: (未設定)
SERVER_PORT: 80

外部アクセス時:

HTTP_HOST: 192.168.1.100  
HTTP_X_FORWARDED_HOST: example.com
HTTP_X_FORWARDED_PROTO: (未設定)  ← ここが問題
HTTP_VIA: 1.1 v1-akamaitech.net(ghost) ← Akamai CDNの証拠
HTTPS: (未設定)
SERVER_PORT: 80

問題の特定

診断結果から以下の問題が明確になりました:

1. Akamai CDN特有の問題

HTTP_VIAヘッダーから、このサイトがAkamai CDNを使用していることが判明。Akamai CDNはX-Forwarded-Protoヘッダーを送信しないため、WordPressがHTTP環境だと誤認識していました。

2. HTTPS判定の失敗

  • 実際の接続:ユーザー → CDN(HTTPS)→ サーバー(HTTP)
  • WordPressの認識:HTTP環境
  • 結果:HTTPS URLへの無限リダイレクト

解決策:環境に特化したwp-config.php

CDN環境の検出とHTTPS強制

// CDN・プロキシ経由の検出
if (isset($_SERVER['HTTP_X_FORWARDED_HOST']) || isset($_SERVER['HTTP_VIA'])) {
    // プロキシ・CDN経由の場合はHTTPS前提で処理
    $_SERVER['HTTPS'] = 'on';
    $_SERVER['SERVER_PORT'] = 443;
    $_ENV['HTTPS'] = 'on';
}

ホスト名の正規化

// 正しいホスト名の設定
if (isset($_SERVER['HTTP_X_FORWARDED_HOST']) && !empty($_SERVER['HTTP_X_FORWARDED_HOST'])) {
    $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
}

WordPressのURL明示

// URL設定の明示(自動検出に頼らない)
define('WP_HOME', 'https://example.com/subdirectory/wp/');
define('WP_SITEURL', 'https://example.com/subdirectory/wp/');
define('WP_CONTENT_URL', 'https://example.com/subdirectory/wp/wp-content');
define('WP_CONTENT_DIR', '/var/www/html/subdirectory/wp/wp-content');

検証と結果

修正後、以下の検証を行いました:

  1. 内部ネットワークからのアクセス:正常動作を継続
  2. 外部ネットワークからのアクセス:エラー解消、正常表示
  3. 管理画面アクセス:HTTPS強制が正常に動作

学んだ教訓とベストプラクティス

1. 環境診断の重要性

必ず実施すべき手順:

  • 診断ファイルによるヘッダー情報の確認
  • 内部・外部からの両方でのテスト
  • CDN/プロキシの種類の特定

2. 環境別の対応パターン

今回はAkamai CDNでしたが、他の環境では異なる対応が必要です:

Cloudflare CDN:

if (isset($_SERVER['HTTP_CF_VISITOR'])) {
    $cf_visitor = json_decode($_SERVER['HTTP_CF_VISITOR'], true);
    if ($cf_visitor['scheme'] === 'https') {
        $_SERVER['HTTPS'] = 'on';
    }
}

AWS CloudFront:

if (isset($_SERVER['HTTP_CLOUDFRONT_FORWARDED_PROTO']) && 
    $_SERVER['HTTP_CLOUDFRONT_FORWARDED_PROTO'] === 'https') {
    $_SERVER['HTTPS'] = 'on';
}

3. 汎用的な診断フレームワーク

// 段階的な診断アプローチ
function detectCDNEnvironment() {
    // 1. CDN固有のヘッダーをチェック
    if (isset($_SERVER['HTTP_VIA']) && strpos($_SERVER['HTTP_VIA'], 'akamai') !== false) {
        return 'akamai';
    }
    if (isset($_SERVER['HTTP_CF_RAY'])) {
        return 'cloudflare';
    }
    if (isset($_SERVER['HTTP_X_AMZ_CF_ID'])) {
        return 'aws_cloudfront';
    }
    
    // 2. 標準的なプロキシヘッダーをチェック
    if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        return 'proxy';
    }
    
    return 'direct';
}

まとめ

特殊なWebサーバー環境でのWordPressインストールでは、以下のアプローチが有効です:

問題解決のプロセス

  1. 症状の詳細な観察(内部・外部アクセスの差異)
  2. 環境の診断(ヘッダー情報の詳細分析)
  3. CDN/プロキシの特定(環境に特化した対応の選択)
  4. 段階的な修正(設定変更の効果を一つずつ確認)
  5. 包括的な検証(複数の環境でのテスト)

重要なポイント

  • 標準的な設定では解決できない場合がある
  • 環境診断が問題解決の鍵
  • CDN/プロキシごとに異なる対応が必要
  • 診断ファイルは問題解決の強力なツール

現代のWebサイトでは、高速化やセキュリティのためにCDNやプロキシが標準的に使用されています。このような環境でWordPressを構築する際は、今回紹介した診断・解決プロセスが役立つでしょう。

何より重要なのは、「なぜ問題が起きているのか」を正確に把握することです。症状だけでなく、環境の特性を理解することで、根本的で確実な解決策を見つけることができます。