分类: PHP
2015-03-18 17:32:14
使用了国外的空间的站长经常会苦恼空间访问速度慢,DNS解析反应慢的问题。为了解决这些问题,最好的办法就是使用CDN,加快博客和网站从国内的访问速度,提高用户体验度。
然而,网站在使用CDN服务后,却发现了一个问题:无法获取到用户访问的真实IP。后台注册或者评论显示的用户IP全部是CDN的IP,或者某一个固定IP地址。这样显然会影响一些功能的使用。
解决上面的问题,一种方法是插件法,这个方法不需要修改任何代码,简单方便。另一种方法自然是修改代码,通用性比较强。如果你的网站的访问速度慢,不妨试用下面的免费CDN,配以本篇文章的介绍的方法,就完美了。
网站使用CDN服务后统计网站真实的用户访问情况获取真实IP
一、安装CloudFlare WordPress插件获取真实IP
1、如果你的Wordpress正在使用CloudFlare,那么可以直接安装CloudFlare WordPress插件,这款官方提供的插件的主要作用就是获取真实IP,另外它还会对你的WP进行一定的优化。
2、这里是,你可以直接在Wordpress后台插件页面中搜索安装。
3、安装后,先到你的CloudFlare账户中,获取API KEY,如下图:
4、然后回到Wordpress后台的CloudFlare设置中,添加以上信息,如下图:
5、提示如下就表示完成了,这个插件就可以正常工作了。
6、另外,在CloudFlare插件页面的下方还有一个优化功能,点击它,CloudFlare会对你的Wordpress进行自动优化。如下图:
二、安装Incapsula WordPress插件得到真实IP
1、如果你的Wordpress正在使用Incapsula免费CDN服务,照样可以方便安装Incapsula WordPress插件。这款插件就是由Incapsula官方提供的。
2、该插件会通过设置$_SERVER['REMOTE_ADDR']来获取用户的真实IP,同时Incapsula WordPress插件会在所有插件执行前完成获取真实IP的工作,从而让其它插件得到准确数据。
3、这里是,当然可以直接从Wordpress后台直接安装。安装完成后,不需要任何操作,就可以正常工作了。
三、修改Wordpress配置文件来获取准确IP地址
1、将一下代码添加到wp-config.php文件开头即可。
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $list = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']); $_SERVER['REMOTE_ADDR'] = $list[0]; }
2、效果见下图:
四、Discuz!论坛修改代码获取用户真实IP
1、Discuz!论坛貌似没有专门的插件来解决使用了CDN后获取用户的真实IP的问题,但是我们可以通过修改代码的方法来实现。
2、Discuz! X2修改的方法是:用Notepad+打开/source/class/class_core.php 文件,搜索“HTTP_CLIENT_IP”,定位我们要修改的代码。如下图:
3、这上图中三行代码全部删除,记住只删除这三行代码,然后加入以下代码作替代。
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) AND preg_match_all(‘#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s’, $_SERVER['HTTP_X_FORWARDED_FOR'], if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) AND preg_match_all(‘#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s’, $_SERVER['HTTP_X_FORWARDED_FOR'],
4、Discuz! X2.5修改的方法是:打开/source/class/discuz/discuz_application.php文件,搜索“HTTP_CLIENT_IP”,同样找到这三行,用以上代码替换。如下图:
5、最后的效果如下图:
6、当然不要忘记到Discuz! 后台更新一下缓存。
五、CDN加速后ASP网站获取用户真实IP的方法
1、请用下列代码来代替你在ASP中获取用户IP的程序代码。
2、代码如下:
Function checkip(checkstring) dim re1 set re1=new RegExp re1.pattern="^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$" re1.global=false re1.Ignorecase=false checkip=re1.test(checkstring) set re1=nothing End Function Function get_cli_ip() dim client_ip if checkip(Request.ServerVariables("HTTP_CLIENT_IP"))=true then get_cli_ip = checkip(Request.ServerVariables("HTTP_CLIENT_IP")) else MyArray = split(Request.ServerVariables("HTTP_X_FORWARDED_FOR"),",") if ubound(MyArray)>=0 then client_ip = trim(MyArray(0)) if checkip(client_ip)=true then get_cli_ip = client_ip exit function end if end if get_cli_ip = Request.ServerVariables("REMOTE_ADDR") end if end function
六、获取IP小结
1、主流的网站程序,如Wordpress、Discuz!在使用CDN后获取真实IP网上都有非常多的教程,很容易解决这个问题。
2、非主流的网站程序,可以用PHP、ASP代码获取CDN后真实IP的通用方法来解决这一问题。
文章出自: 版权所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源。 禁止全文转载。