風車

WordPress 使用 CDN 後如何獲取訪客真實 IP 地址?

WordPress 使用 Cloudflare 等 CDN 後,WordPress 後臺評論管理看到的評論 IP 都是 CDN IP 地址而不是訪客真實 IP,這個其實無關緊要。只是如果您使用了 Login LockDown 這類插件保護 WordPress 登錄頁面防止暴力破解,Login LockDown 封禁/記錄的 IP 也是 CDN 的 IP,這個誤封 IP 就不太好了。

WordPress 使用 CDN 後如何獲取訪客真實 IP 地址?

編輯 wp-config.php 文件,在 wp-config.php 文件 /* 好了!請不要再繼續編輯。請保存本文件。使用愉快! */ 之前添加如下代碼即可:

//CDN 獲取訪客真實 IP
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
$list = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
$_SERVER['REMOTE_ADDR'] = $list[0];
}

還有一個方法是使用 WordPress Must Use Plugins實現:

首先在 wp-content 裏面創建一個 mu-plugins 目錄,mu-plugins 裏面的 Plugins 插件是 Must Use Plugins,會自動/強製啟用,優先級更高,並且無法從後臺禁用/卸載。

然後在 mu-plugins 創建 cdn-realip.php,文件中輸入上面的代碼,或者下面的代碼也可以:

<?php
/*
Plugin Name: Cloudflare CDN Real IP
Description: Get Cloudflare CDN Real IP for Visitor
*/

if ( isset( $_SERVER["HTTP_CF_CONNECTING_IP"] ) ) {
$_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
}

或者:

<?php
/*
Plugin Name: CDN Real IP
Description: Get CDN Real IP for Visitor
*/

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