WordPress获得经过阿里云CDN服务的访客真实IP

小柊 发表于 2018年06月30日 23时48分08秒

一、背景

也记不得是去年阿里云搞的哪个活动了,反正笔者我在那会儿参加了一个CDN优惠购流量的活动,现在每个月都有20G的CDN流量包会充值进来。

毕竟自己也是花了钱的,不用就太可惜了。所以我把自己几个主要对外的网站都接入了阿里云的CDN服务。

不过在用了一段时间之后发现了一个问题,那就是后台看不到提交评论的用户IP了。

一开始在后台看到提交评论的用户IP清一色是192.168.16.x的一个地址,经过检查之后发现这个地址是因为我把WordPress放进docker了之后,新增加的网桥地址段的地址,而那个192.168.16.x的IP正是ECS宿主机的获得IP段。所以先设置了Nginx反向代理的时候将访客的IP设置到 X-Real-IP头上。

但后来发现还是不对,因为访客在提交评论请求的时候是直接发给阿里云的CDN服务器,再由阿里云的CDN服务器向我的服务器发起回源请求,此时Nginx获得的客户端IP,并不是访客的真实IP,而是阿里云CDN服务器的IP。

 

二、解决方案

翻了阿里云CDN的文档,也没找到说回源的时候会不会带访客IP的文档。没办法,那就自己动手看看吧。

把下面的代码保存到“test.php”里(文件名随意,后缀名使用php):

 

这个命令是用来打印在接受请求时,所有的服务器变量。然后把这个文件放到网站根目录下,再用浏览器访问这个test.php。

因为这个页面是新增的,CDN服务器上是没有这个页面的缓存的,所以这个请求最终会回源到我的服务器上。

可以看到阿里云CDN在回源的时候会加上几个“HTTP_ALI”的头:

 

而我们想要的访客真实IP,就被放在了“HTTP_ALI_CDN_REAL_IP”头里。

 

有了访客真实IP之后,我们就需要让WordPress去识别这个IP,操作如下:

编辑WordPress根目录下的“wp-config.php”文件,添加以下代码:

 

 

 

添加完成后保存文件并重启网站即可,为了防止一些不必要的信息泄漏,记得删掉刚刚试验时添加的test.php。

 

 

 

小柊

2018年6月30日 23:41:03

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注