欢迎来到万事屋~

WordPress 获取访客真实 IP

发表于:2024-12-11 16:16:48

WordPress 中通过配置获取 CDN 后的访客真实 IP

使用 CDN(如 Cloudflare、阿里云 CDN 等)加速 WordPress 网站时,所有的 HTTP 请求都会先经过 CDN 的服务器,然后才到达你的服务器。因此,当 WordPress 通过 $_SERVER['REMOTE_ADDR'] 获取访客 IP 时,获取到的是 CDN 服务器的 IP,而不是访客的真实 IP。这对记录访客信息(如评论、日志分析等)非常不利。

为了解决这个问题,可以利用 CDN 提供的 HTTP_X_FORWARDED_FOR 请求头获取真实的访客 IP。

以下是详细的教程,教你如何通过修改 wp-config.php 文件来正确获取访客的真实 IP。

一、问题背景

1.默认行为

WordPress 使用 $_SERVER['REMOTE_ADDR'] 作为访客的 IP 地址。如果网站使用 CDN,这个值将是 CDN 服务器的 IP 地址,而非真实访客的 IP。

2.CDN 提供的解决方案

绝大多数 CDN 都会在 HTTP 请求头中添加一个 HTTP_X_FORWARDED_FOR 字段,记录经过 CDN 转发的原始访客 IP。此字段可能包含多个 IP 地址,按照顺序,第一个 IP 是最接近访客的。

二、解决方案

通过在 wp-config.php 中添加代码,将 HTTP_X_FORWARDED_FOR 的第一个 IP 地址解析为访客真实 IP,替换掉 $_SERVER['REMOTE_ADDR']

实现代码

打开 wp-config.php 文件,在顶部(通常是注释 /* That's all, stop editing! Happy blogging. */ 之前)添加以下代码:

// WordPress 使用 CDN 后获取访客真实 IP
if ( !empty($_SERVER['HTTP_X_FORWARDED_FOR']) ) {
    $get_HTTP_X_FORWARDED_FOR = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
    $_SERVER['REMOTE_ADDR'] = trim($get_HTTP_X_FORWARDED_FOR[0]);
}

三、代码详解

1.检查 HTTP_X_FORWARDED_FOR 是否存在
   $_SERVER['HTTP_X_FORWARDED_FOR'] 是由 CDN 添加的请求头。如果该字段不存在,则说明请求没有经过 CDN,继续使用默认的         $_SERVER['REMOTE_ADDR']
2.解析 IP 列表
   HTTP_X_FORWARDED_FOR 字段的值是一个以逗号分隔的 IP 地址列表。例如:
     这里,explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']) 会将其分割成数组。
3.获取第一个 IP 地址
     根据惯例,列表中的第一个 IP 是最接近访客的真实 IP。通过 trim($get_HTTP_X_FORWARDED_FOR[0]) 去掉多余的空格。
4.替换 $_SERVER['REMOTE_ADDR']
     将解析出的真实 IP 替换 $_SERVER['REMOTE_ADDR'],这样 WordPress 获取到的就是访客的真实 IP。
203.0.113.195, 198.51.100.17, 192.0.2.1

四、适用范围

  1. 支持的 CDN
    只要 CDN 会在请求中添加 HTTP_X_FORWARDED_FOR 字段,该方法即可正常工作。

    • Cloudflare
    • 阿里云 CDN
    • 腾讯云 CDN
    • AWS CloudFront
  2. WordPress 版本
    适用于所有支持 wp-config.php 的 WordPress 版本。

五、注意事项

在 Nginx 中的配置
  1. 安全性
    由于 HTTP_X_FORWARDED_FOR 是一个 HTTP 请求头,可能被伪造。因此,建议将其与服务器白名单结合使用,确保只有可信的 CDN 请求可以传入。

  2. 多级代理
    如果使用了多级代理(如多个 CDN 层级),你需要根据具体架构调整解析逻辑,确保获取到正确的 IP。

  3. 其他服务器配置

    • 如果你使用了 Nginx 或 Apache,也可以通过配置文件处理访客 IP。
set_real_ip_from 0.0.0.0/0; # 替换为可信的 CDN IP 段
real_ip_header X-Forwarded-For;

六、测试

  1. 本地测试

    • 访问网站并提交评论。
    • 检查 WordPress 评论记录的 IP 是否正确。
  2. 线上环境测试

    • 打开日志功能,记录所有访问 IP。
    • 确认日志中记录的 IP 地址为访客真实 IP。

通过以上配置,你的 WordPress 网站在使用 CDN 后也可以正确记录访客的真实 IP。这样不仅可以提高数据的准确性,还能为日志分析、防护插件(如防火墙、反垃圾评论)提供可靠的数据支持。

发表评论

已输入 0/180 个字

最新评论


avatar

鸢栀 - 网站

回复 沉沦:

这么快就贴出来了啊~

哈哈哈哈,之前发过一篇一样的教程,刚刚发现被bing收录了,担心别人打开后会404,所以重新写了一篇一样的

发表于:2024-12-11 16:36:19

来自:中国 - 安徽 - 合肥

avatar

沉沦 - 网站

这么快就贴出来了啊~

发表于:2024-12-11 16:33:49

来自:中国 - 河北 - 保定