Wordpress http 404, mod_rewrite和系统负载

相信很多Wordpress用户都打开了mod_rewrite功能,这对访问者或者搜索引擎来说是一个非常友好的设置,但也可能给服务器带来意想不到的高系统负载。比如,当下面的这种垃圾集群试的访问服务器的时候:

221.217.84.189 - - [10/Sep/2008:13:54:00 +0800] "GET /admin/htmledit/admin_login.asp HTTP/1.1" 404 1619 "-" "-"
221.217.84.189 - - [10/Sep/2008:13:54:00 +0800] "GET /admin/editor/admin_login.asp HTTP/1.1" 404 1619 "-" "-"
221.217.84.189 - - [10/Sep/2008:13:54:01 +0800] "GET /WebEditor/admin_login.asp HTTP/1.1" 404 1619 "-" "-"
221.217.84.189 - - [10/Sep/2008:13:54:01 +0800] "GET /htmledit/admin_login.asp HTTP/1.1" 404 1619 "-" "-"

如果你没有在.htaccess文件中开启mod_rewrite功能(对Wordpress用户来讲,没有自定义链接结构,是默认的 /?p=xx 结构),那Apache服务器处理这些链接请求的时候是非常容易,返回http 404 code。即便有大量同时的http 404,在我这里的cpu占用也不会超过2%。

如果开启了mod_rewrite,既在.htaccess文件中加入了:

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

那么服务器在收到每个url请求的时候,Apache都会把这些请求交给Wordpress来处理,这就是我们能够看到非常友好的链接结构的原因。但如果是上面网站访问日志中那些不存在的页面怎么办?Apache还是会把他们交给Wordpress来处理,这时候的系统负载就大不相同。在我目前的这个VPS上,Wordpress每处理一个http 404,会占用6~7%的cpu!

404和mod_rewrite

相信我,6~7%还是我对当前Wordpress主题中的404.php完全静态化的结果,在做这样的处理以前,每处理一个http 404,所消耗的CPU就如我在“比较Habari和Wordpress的cpu占用”中提到的一样,8~10%。如果你的主题中没有404.php,Wordpress会显示你的博客主页,同样是非常高耗能的。在VPS上还好,网站密度低,也不是所有的站点都会打开mod_rewrite功能,服务器承受这种系统负载还是很轻松的。在虚拟主机上,最糟的是若干人为开Wordpress博客合租的虚拟主机上,加以时日,外链一多,扫站的垃圾就来了,单就这些http 404,足以让CPU超限。

曾试着让Apache拦截掉这些http 404,比如在.htaccess文件中加入:

ErrorDocument 404 /404.html

发现这样做是徒劳的,开启了mod_rewrite之后,Apache甚至都不知道这些链接是不存在的,始终会由Wordpress生成一个虚拟的页面,这就是传说中的软404(Soft 404)。而且不仅仅是Wordpress有这样的问题,Joomla!,Drupal,Habari...我们能做的,就是把这些扫站的垃圾统统屏蔽掉!这帮狗日的。

LAMP

Email: i at onepx dot com || QQ: ⑧九零三④幺 || 微信: onepxcom
©2023 一像素 蜀ICP备13026576号-2 网站地图