WordPress on FastCGI

2006年12月23日 | Author: zhangdi | 标签:

最近才发现,dreamhost上默认将PHP运行在CGI模式。这可能是感觉速度有些慢的潜在原因之一,但是在Dreamhost上已经不可能使用mod_php了。官方解释是:

因为如果使用mod_php,所有的用户进程都是在apache的进程中运行,这样不仅会造成apache的系统负载加大,而且也让dreamhost不知道哪些用户的负载量大。所以最终决定去掉mod_php的支持,只能使用CGI模式。

CGI的性能问题,一直是大家抱怨的焦点。每一个web请求到要重新new一个CGI进程,想想都觉得慢~(其实负载不大的话,性能还是可以的)。还好的是,在dreamhost上可以很轻松的实现FastCGI。FastCGI的最大好处是它不需要每次都要重新创建新的cgi进程。总会有一些空闲的cgi进程在内存中待命,这样可以提高性能。dreamhost的wiki上有一篇专门的文章介绍如何将PHP运行在FastCGI模式下。

如果在wordpress站点下成功设置了PHP+FastCGI,那么如果不出所料(wordpress2.0.5以下版本),你会遇到很多error500(Server Internal Error)。看log可以发现是因为“error parsing headers: duplicate header ‘Status’”。恭喜,你将很快可以解决这个问题。

这是一个wordpress的bug,很有可能在以后的版本中修复。目前可以使用一个plugin来修复(下载见下,因为有可能中国用户不能访问作者的网站,所以我在我的网站上放了一份),而且这个plugin也是少有的官方出的plugin。只需要激活这个plugin,这个问题就会被修复。如果登陆后,不能自动跳转到admin界面,可以直接输入url(一般是:http://yourhost/your/wordpress/dir/wp-admin/plugins.php)。

Update:
这个plugin不能修复自己定义的404页面。要修复404页面不得不修改代码了,在/wp-includes/functions.php文件中,找到这两句:

@header("Status: $header $text");
@header("HTTP/1.1 $header $text");

替换为:

if (substr(php_sapi_name(), 0, 3) == 'cgi')
  @header("Status: $header $text");
else
  @header("HTTP/1.1 $header $text");

OK, 测试一下吧。:)

Download:
wordpress-2.0.5-tuneup.php.gz
Original post:
500 server error fix plugin(中国用户可能会访问不了)

目前还没有任何评论.