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
四、适用范围
-
支持的 CDN
只要 CDN 会在请求中添加HTTP_X_FORWARDED_FOR
字段,该方法即可正常工作。- Cloudflare
- 阿里云 CDN
- 腾讯云 CDN
- AWS CloudFront
-
WordPress 版本
适用于所有支持wp-config.php
的 WordPress 版本。
五、注意事项
在 Nginx 中的配置-
安全性
由于HTTP_X_FORWARDED_FOR
是一个 HTTP 请求头,可能被伪造。因此,建议将其与服务器白名单结合使用,确保只有可信的 CDN 请求可以传入。 -
多级代理
如果使用了多级代理(如多个 CDN 层级),你需要根据具体架构调整解析逻辑,确保获取到正确的 IP。 -
其他服务器配置
- 如果你使用了 Nginx 或 Apache,也可以通过配置文件处理访客 IP。
set_real_ip_from 0.0.0.0/0; # 替换为可信的 CDN IP 段
real_ip_header X-Forwarded-For;
六、测试
-
本地测试
- 访问网站并提交评论。
- 检查 WordPress 评论记录的 IP 是否正确。
-
线上环境测试
- 打开日志功能,记录所有访问 IP。
- 确认日志中记录的 IP 地址为访客真实 IP。
通过以上配置,你的 WordPress 网站在使用 CDN 后也可以正确记录访客的真实 IP。这样不仅可以提高数据的准确性,还能为日志分析、防护插件(如防火墙、反垃圾评论)提供可靠的数据支持。
鸢栀 - 网站
哈哈哈哈,之前发过一篇一样的教程,刚刚发现被bing收录了,担心别人打开后会404,所以重新写了一篇一样的
发表于:2024-12-11 16:36:19
来自:中国 - 安徽 - 合肥
沉沦 - 网站
这么快就贴出来了啊~
发表于:2024-12-11 16:33:49
来自:中国 - 河北 - 保定