众所周知,当网站接入CDN加速后,部分程序例如Typecho获取到的IP就不再是访客真实IP了。在appnode中,有真实IP识别这个功能,但根据我的测试,并没什么用,评论照样显示的是cdn服务器的IP。
我最终的解决方案是在typecho的根目录中的config.inc.php文件添加如下代码:
/** 设置真实IP */
if(isset($_SERVER['HTTP_CF_CONNECTING_IP']))$_SERVER['REMOTE_ADDR']=$_SERVER['HTTP_CF_CONNECTING_IP'];
else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))$_SERVER['REMOTE_ADDR']=end(explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']));
如下图所示:
填入文件最底端即可。
简单解说:
CDN服务按照行业规范一般会设置$_SERVER['HTTP_X_FORWARDED_FOR'],保存来源IP,当层数多于一层时以半角逗号,分隔。
CF有一个特性,即它还会发送$_SERVER['HTTP_CF_CONNECTING_IP']保存请求IP。由于我用的是CF,所以我优先获取这个参数保存的IP。
关于有人觉得x-forwarded-for容易被欺骗,经过V2EX网友的测试,CDN会根据实际的转发情况将这个头部重写,只有 php 裸奔在 web server 的时候才会被欺骗。
版权属于:寒夜方舟
本文链接:https://www.wnark.com/archives/21.html
本站所有原创文章采用署名-非商业性使用 4.0 国际 (CC BY-NC 4.0)。 您可以自由地转载和修改,但请注明引用文章来源和不可用于商业目的。声明:本博客完全禁止任何商业类网站转载,包括但不限于CSDN,51CTO,百度文库,360DOC,AcFun,哔哩哔哩等网站。
4 条评论
话说博主你的站是怎么做到点击站内链接先渲染再跳转的呢?
我的博客搜:短链接
多谢
感谢分享,亲测有效