一般站点在配置了CDN进行加速后都无法获取访客真实IP,只能获取CDN代理IP。此时会导致一系列问题,比如无法有效过滤广告等垃圾留言和封杀恶意攻击等等。。。
之前在网上找了一圈解决方法,发现不适用我的情况。今天又搜了一下,发现两篇文章,都是添加同一段代码到 Typecho 的 php 文件里,只不过添加的地方不一样(经测试,一个可行,一个不可行)。今天在这里给大家提个醒,添加到主题模板里 function.php 的方案是不可行的。想要正确获取访客真实IP,请在 Typecho 站点根目录里的 config.inc.php 添加下面这段代码。
关于这个获取使用 CDN 后的真实访客IP地址的代码在 WordPress 上也是是适用的,WordPress 放到 wp-config.php 里即可。
//绕过 CDN 代理IP获取客户真实IP地址
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$list = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
$_SERVER['REMOTE_ADDR'] = $list[0];
}
添加完之后,你的 Typecho 站点的评论就会直接显示访客真实IP,而不是CDN的代理地址了。
9 条评论
感谢,已参考一些资料解决。今天把垃圾评论的ip给手动block掉了。请问dalao有没有什么解决垃圾评论的好方法呢?
开启需要有评论通过审核(只需要通过一次,此后的都不需要审核),设置邮箱和网站为必填(一般只设邮箱),装垃圾评论屏蔽插件,自己写正则规则屏蔽哪些长用户名邮箱和网址访客(很多垃圾评论都来自这类用户,普通用户基本不会用长字符串用户名和网站),最后的手段拉黑IP。
还有个问题,过滤黑名单HTTPS广告时,http的广告会不会有失去效果?此时,是不是要选全局过滤才能同时滤http和https呢?
好像HTTP不管选哪个模式都是全局过滤的,至于黑名单HTTPS是在HTTP的基础上增加过滤黑名单HTTPS,全局模式则是把黑名单HTTPS扩充为全局。
好吧,懂了
另一个问题,F大的LEDE是流控模块imq与是ifb呢?
LEDE 的流控我没用过,也没去了解过,所以不知道呢。
我也有用这段代码.好像用不用都比较正常
可能 CDN 的部署方式不一样吧。