Showing posts with label FastCGI. Show all posts
Showing posts with label FastCGI. Show all posts

Sunday, June 21, 2009

以FastCGI的方式运行PHP

让PHP以FastCGI的方式运行可以最多提高10倍左右的速度, 还是很诱人的, 那天为了测试这个性能提升有多少, 就在Ubuntu里配置了一下.

首先需要安装一个软件包, 如果按上一篇文章[使用Ubuntu源安装LAMP]里讲的过程安装好的话其实就已经不用再安了, 需要的就是php5-cgi这么一个包.

然后需要打开Apache的actions模块, 因为后面的配置需要用到. 以下操作基于源安装的Apache:
$ cd /etc/apache2/mods-enabled/
$ sudo ln -s ../mods-available/actions.* .

最后就是修改配置文件了, 参考了FastCGI的官方文档. 添加如下配置:
# FastCGI for PHP
FastCgiServer /usr/lib/cgi-bin/php
AddHandler php-fastcgi .php
Action php-fastcgi /cgi-bin/php
需要注意, 最后一句中的/cgi-bin/是一个别名, 即下面一行配置指定的:
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
经过上面的一系列配置, 当php后缀的文件运行时就会自动以FastCGI的方式运行了. 还可以使用php_sapi_name这个函数测试是否配置成功, 如果运行输出的是cgi-fcgi就证明成功了, 失败通常输出apache2handler.

运行的时候需要注意两点, 一是要给PHP文件加上可执行 (x) 权限, 另一个就是PHP文件所在目录需要在Apache中设置+ExecCGI选项:
Options +ExecCGI

这时就可以使用ab工具来测试了:
$ ab -c 50 -n 1000 http://localhost/fcgi-bin/test.php
经测试, 一个简单的字符串输出的PHP程序才只有处理复杂操作的C++程序性能的2/3, 看来差距还是挺大的.

使用Ubuntu源安装LAMP

以前写过一个编译安装LAMP的文档, 放在我的Google Code的texsky项目里 (关于texsky的详细介绍参见以前的一篇文章[又建了一个项目 -- texsky]), 前段时间觉得有源还是用源好点, 毕竟更新会更加方便.

用源就简单了, 只需要记住软件包名就行了, 以下包名在9.04下测试通过:
$ sudo apt-get install apache2.2-common mysql-server php5 php5-cgi php5-cli php5-mysql
真怀疑为了一点扩展性和性能提升去折腾编译值不值得...

如果还需要FastCGI的支持, 再加上两个软件包:
$ sudo apt-get install libapache2-mod-fastcgi libfcgi-dev
顺便提一下libfcgi-dev这个包, 刚开始以为这个包只是编译的时候需要用到, 因为它的描述是: Header files of FastCGI, 所以误以为只有头文件而已. 结果运行的时候由于没安这个包就出错了, 研究了一下才发现这个包里还包含了一些so文件 (好阴险), 自然是运行时需要用到的了, 安上以后运行一切正常.