当您的WordPress博客启用Tencent Cloud EdgeOne加速服务后,您可能会发现访客在发表评论时,其IP地址显示为腾讯云CDN节点的IP,而非访客的真实IP。这是因为所有访客请求都先经过EdgeOne的节点,再由节点转发至您的源站服务器,导致WordPress默认获取的是CDN节点的IP地址。为了解决这一问题,让您的网站能够正确记录和显示访客的真实IP,您需要在WordPress的配置文件中添加一小段代码。

问题根源:CDN的工作机制

内容分发网络(CDN)通过在全球部署的边缘节点缓存您的网站内容,当用户访问时,会由距离用户最近的节点提供服务,从而实现加速效果。在这个过程中,CDN节点作为反向代理,用户的直接请求是到达CDN节点,然后由CDN节点向您的源站服务器发起请求。因此,对于您的WordPress网站而言,直接与之通信的是CDN节点,所以PHP的 $_SERVER['REMOTE_ADDR'] 变量获取到的便是CDN节点的IP地址。

解决方案:通过HTTP头获取真实IP

为了解决这个问题,像Tencent Cloud EdgeOne这样的CDN服务商会在向源站转发请求时,将用户的真实IP地址添加到一个特定的HTTP请求头中。根据腾讯云的官方文档,EdgeOne会通过以下HTTP头部来传递客户端的真实IP信息:

  • X-Forwarded-For: 这是一个业界通用的标准,用于记录请求经过的每一个代理服务器的IP地址。第一个IP通常就是用户的真实IP。
  • EO-Connecting-IP: 这是EdgeOne提供的另一个头部,记录了直接连接到EdgeOne节点的客户端IP。

因此,我们只需要修改WordPress的配置,让它从这些HTTP头中读取访客的真实IP地址即可。

操作步骤:修改wp-config.php文件

要让您的WordPress博客正确显示访客IP,您需要在网站根目录下的wp-config.php文件中添加以下代码。请将代码添加在/* That's all, stop editing! Happy publishing. */这行注释的上方。

// 针对Tencent Cloud EdgeOne及其他CDN获取真实访客IP
if ( isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
    $list = explode( ',', $_SERVER['HTTP_X_FORWARDED_FOR'] );
    $_SERVER['REMOTE_ADDR'] = $list[0];
}

代码解释:

  1. if ( isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ):首先检查是否存在 HTTP_X_FORWARDED_FOR 这个HTTP请求头。
  2. $list = explode( ',', $_SERVER['HTTP_X_FORWARDED_FOR'] );X-Forwarded-For 头部可能包含多个IP地址,以逗号和空格分隔(例如:真实访客IP, 代理1 IP, 代理2 IP)。这行代码将这些IP地址分割成一个数组。
  3. $_SERVER['REMOTE_ADDR'] = $list[0];:取数组中的第一个IP地址(即最原始的访客IP),并将其赋值给 $_SERVER['REMOTE_ADDR'] 变量。WordPress正是通过这个变量来获取和存储评论者的IP地址。

完成以上修改并保存文件后,您的WordPress网站在处理新的访客评论时,就能够正确地获取并显示访客的真实IP地址了。对于已经存在的评论,其IP地址不会被追溯修改。

通过这个简单的配置,您的WordPress博客便能在Tencent Cloud EdgeOne的加速和安全保护下,依然准确地记录每一位访客的足迹。

转载请注明原文链接:首页 > 日常 > 让您的WordPress博客慧眼识珠:Tencent Cloud EdgeOne环境下获取访客真实IP(在cdn下获得真实ip)
  • 微信打赏微信打赏

AnHui.HuaiNan

我很感谢那些爱过我的人.