昨日、コメントメール通知機能「WordPress のメール返信スタイルを装飾する」を有効にしたばかりのところ、メール内のコメント投稿者の IP が間違っていることに気付きました。WordPress が CDN の IP ノードを取得していたのです。

これでは、Web サイト訪問者の地域的な関係を分析しにくくなりますし、WordPress に標準搭載されている IP によるコメントブロック機能も使えなくなってしまいます。そこで、これを解決したいと思いました。さっそくネットで関連情報を調べたところ、幻杀ブログで完璧な解決策を見つけました。以下で皆さんに共有します。

画像

解決策

WordPress のルートディレクトリにある wp-config.php ファイルを開き、ファイルの末尾に以下のコードを追加します。

if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $list = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
    $_SERVER['REMOTE_ADDR'] = $list[0];
}

原理

CDN の HTTP ヘッダーには訪問者の IP データが記録されています。このコードは、WordPress の IP 変数を $_SERVER から取得したものに置き換えるものです。上記のコードは任意の CDN やリバースプロキシで使用でき、IP アドレスを正しく取得できます。