比尔盖子 博客

Tag: Wordpress

AutoOptimize——比尔盖子磁盘空间耗尽的元凶

总是感觉自己VPS上的CentOS无缘无故填完整个硬盘,一直以为是日志文件弄得。正如df -h告诉我的:

Filesystem            Size  Used Avail Use% Mounted on
/dev/xvde              15G   11G  3.3G  77% /mnt/centos

但是刚才使用du统计我自己的网站大小,居然发现/wp-content/cache/autoptimize/文件夹中有N个文件,比尔盖子觉得缓存这么多很不爽,于是想使用

rm ./html/blog/wp-content/cache/autoptimize/autoptimize*

把这些文件干掉。结果得到错误提示:

-bash: /bin/rm: Argument list too long

啊哈?!里面的文件多到已经超过rm的处理能力了!?换用命令:

rm -r  ./html/blog/wp-content/cache/autoptimize/
#为了防止WP报错,因此还需建一个目录
mkdir  ./html/blog/wp-content/cache/autoptimize/

等待了1分钟,终于结束删除了,这时候df -h一下,居然发现

Filesystem            Size  Used Avail Use% Mounted on
/dev/xvde              15G  4.1G   10G  29% /mnt/centos

比尔盖子都不知道怎么形容了……这些缓………缓存居然用了7GB的硬盘空间!
经过搜索,终于在网络上找到了此问题的正解:

“这里需要注意的是:Autoptimize插件会自动在它插件目录下的Cache文件夹中储存经过优化的缓存数据,如果你页面使用的是不同的样式表,就可能会导致文件夹变大,那么,你就需要启用只在<head>中寻找样式表了。”

原来如此!

在用户使用代理,或者服务器使用反向代理或CDN的情况下,获得访客的正确IP

这个方法既可以获得使用代理访问网站访客的真实IP,也可以在服务器使用反向代理或CDN的情况获取访客的真实IP。

由IP不正确想到的

最近,比尔盖子博客使用了Cloudflare的免费CDN服务来加速博客的访问,但是从昨天开始比尔盖子留意到这样一个问题:

由于Cloudflare CDN的本质是代理服务器(反向代理),因此,网站系统评论获取评论信息时,就会将用户的IP统统获取为CDN服务器的IP,导致了无法正确获得浏览者的IP。

 

因为比尔盖子常使用HTTP代理,所以对代理还是有一些了解的。

代理一般分为“透明代理、匿名代理、超级匿名代理”。如果使用透明代理,服务器将依旧可以通过一些方式来获取用户的真实IP;如果使用匿名代理,服务器可以通过一些方式发现用户可能在使用代理服务器,但无法确定用户的真实IP;使用超级匿名代理时,服务器无论如何也无法检测出用户使用了代理服务器。

那么,Cloudflare CDN的反向代理会不会也是一个透明代理呢?能否采用识别使用代理服务器用户真实IP的一般方法,来获取在服务器使用Cloudflare CDN或反向代理时获取正确的用户IP呢?

原理

在PHP中用户的IP有三个属性:HTTP_CLIENT_IP、
HTTP_X_FORWARDED_FOR、REMOTE_ADDR。

REMOTE_ADDR是和服务器连接时,服务器看到的IP地址(如果使用代理,就是最后一台代理的IP);HTTP_CLIENT_IP为代理服务器的IP,不使用代理就没数据;HTTP_X_FORWARDED_FOR是使用代理时,用户的真实IP,不使用代理就没数据(如果用户使用的多层代理,则 用户–> A –> B –> 网站,那么数据就为“用户IP,A的IP”,即最后一台代理服务器之前数据流经过的所有服务器的IP地址)。

这三个值均可伪造,不过如果不是匿名代理或超级匿名代理,是不会对其伪造的。

测试

因此,比尔盖子编写了一个PHP脚本来测试。这个脚本可以使用http://biergaizi.com/ipaddress.php访问。需要注意的是,为了知道Cloudflare CDN是不是透明代理,这个脚本也被CDN加速了,因此本质上是你是用一个代理访问的。

源码如下:

<?php

global $ip;
global $ip2;
global $ip3;
$ip = getenv("HTTP_CLIENT_IP");
$ip2 = getenv("HTTP_X_FORWARDED_FOR");
$ip3 = getenv("REMOTE_ADDR");

echo "HTTP_CLIENT_IP:     ","<br>",$ip,"<br><br>";
echo "HTTP_X_FORWARDED_FOR:     ","<br>",$ip2,"<br><br>";
echo "REMOTE_ADDR:     ","<br>",$ip3,"<br><br>";

?>

测试的结果是:REMOTE_ADDR是代理服务器的IP,HTTP_X_FORWARDED_FOR是访问者真实的IP!也就是说,Cloudflare CDN本质上是透明代理,可以用HTTP_X_FORWARDED_FOR来获得访问者真实的IP!但是唯一奇怪的是,HTTP_CLIENT_IP是没有数据的,请懂的同学解答一下。

实现

有了刚才测试的结果,实现起来就容易多了。

WordPress中获取IP是通过获取REMOTE_ADDR实现的。我们只需要修改Wordpress中获取访问者IP的函数,增加一个逻辑判断:如果HTTP_X_FORWARDED_FOR有数据,就用HTTP_X_FORWARDED_FOR代替REMOTE_ADDR,这样就实现了获得浏览者的正确IP。

但关键是找不到Wordpress获取IP的函数在哪个文件,因此又找到了这样一种方法:因为Wordpress的wp-config.php配置文件是一个公共文件,大部分文件都会调用它,所以只需要修改wp-config.php就行了。修改的方法也异常简单,只需要在wp-config.php开头加上

if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) 
{
$list = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
$_SERVER['REMOTE_ADDR'] = $list[0];
}

就搞定了。这段代码的意思是:如果HTTP_X_FORWARDED_FOR有数据(那就肯定是用代理了),那么就用HTTP_X_FORWARDED_FOR里的IP替换REMOTE_ADDR的IP。这样真实IP就把代理服务器的IP替换掉了。

这个方法正如开头强调的,这个方法不仅可以获得使用代理访问网站访客的真实IP,也可以在服务器使用反向代理或CDN的情况获取访客的真实IP。

博客已升级到WordPress 3.1

博客已于升级到盼了很久的Wordpress 3.1正式版!

Akismet,垃圾评论的克星

站长将博客升级到3.0.1之后,就发现Akismet这个插件一直要求我填写Akismet API Key,我也不知道这个插件是何方神圣,便禁用之。

后来,我看到一个人博客的日志上说道,Akismet可以防垃圾评论!
心想:太好了,终于不用为了防广告辛辛苦苦硬着头皮改模板了(本人HTML、PHP皆不好)!

先看看Akismet的自我介绍吧:

对大多数人来说,Akismet 将大量减少甚至彻底消灭垃圾评论和不良 trackback。即使有漏网之鱼,您只需将其标成“垃圾评论”后,Akismet 会自动从失误中学习。获取 WordPress API Key 需要您有账号,如果没有,可以申请一个。

立即去了  http://akismet.com/get/  申请API KEY,却发现需要美元,晕。

仔细看看,原来如果只是个人使用,点击下面的一行文字或猛击这里,就可以免费申请账号,申请过程见下图。

点击Next后,会要求输入验证码。验证码有两个单词,要一起输入,中间不加空格。

然后,你的邮箱会收到电子邮件,内容为:

Thanks for choosing Akismet.

Your Akismet API key is: XXXXXXX(这里是你的密钥)

然后把你的API KEY复制下来,填入Akismet的设置中即可。
如果你有多个博客,可以只使用一个KEY。

P.S:Akismet的网站长期被墙,最近刚解封。如有遇网站被墙的,可浏览联系我帮忙申请或联系我索取一个“比尔盖子 在线代理”的账号,然后使用代理申请。

将博客改版

今天可真忙啊,首先给博客更换了一个漂亮的模板,又安装了代码高亮插件,又给我70多个主题增加了标签(累啊),不过看到那个3D的标签切换效果,再累也值得!

最近考虑将博客与“比尔盖子站”独立出去。

修复了“Wp Super Cache”

很早以前,我就安装了 Wp Super Cache ,目的是为了让我的博客速度变快。

但是,Wp Super Cache 一直报这个错误:
WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed!

因为这个插件不重要,所以一直没管它,

今天,我重装了Wp Super Cache,终于恢复正常了。

以后,大家访问我的博客也许会变快哦!

Copyright © 2022 比尔盖子 博客

Theme by Anders NorenUp ↑