精子生于 1995 年,英文 ID jysperm.
Ubuntu 12.04 部署 Nginx + PHP-FPM 5.4 + APC
为什么选择这几个软件,和这几个版本?
- Ubuntu的新版本一向很坑, bug成堆, 而12.04是一个LTS版本, 稳定性有保证. 而相比于其他发行版, Ubuntu是最易用的.
 - Nginx是一个轻量级的, 擅长并发的Web服务器, 相比于Apache, 它并发性能更好, 占用资源更少.
 - 和Nginx配合的话, 毫无疑问要选择PHP-FPM, 它是一个专用于PHP的FastCGI管理器.
 - PHP5.4 版本丢掉了很多历史包袱, 可以获得更高的安全性, 同时还有新的功能, 比如数组的方括号简写形式.
 - APC是一个开源的PHP字节码缓存器, 目前非常活跃, 且非常贴近PHP开发小组, 有望被内置到PHP6中.
 
安装软件包
12.04的默认源里面只有5.3版本的PHP, 而且nginx也比较旧, 所以我们需要自己添加源:
add-apt-repository ppa:ondrej/php5
add-apt-repository ppa:nginx/development
apt-get update
如果没有add-apt-repository这个脚本则需要:
apt-get install python-software-properties
ppa:ondrej/php5 这个是来自Debain的最新PHP构建. ppa:nginx/development 是来自官方的Nginx构建.
apt-get install nginx php5-cli php5-fpm php-pear build-essential libpcre3-dev
- nginx - Nginx主程序
 - php5-cli - 命令行模式
 - php5-fpm - FPM模式
 - php-pear - PHP包管理器和扩展管理器(包括pecl)
 - build-essential - 编译环境(需要编译APC)
 - libpcre3-dev - 经测试APC依赖的一个库
 
配置APC
pecl install apc
然后pecl会自动下载并编译APC, 但APC没有默认被加入php.ini, 所以我们要:
echo "extension=apc.so;" >> /etc/php5/fpm/php.ini
cp /etc/php5/fpm/php.ini /etc/php5/cli/php.ini
APC 有个自带的监视器, 可以查看缓存的详细信息, 如内存占用, 命中率, 已缓存的文件等等, 有需要的话可以自行复制到Web目录.
cp /usr/share/php/apc.php /root/web/
配置Nginx
创建一个新站点:
cat > /etc/nginx/sites-enabled/web.conf
server {
    listen 80 default_server;
    server_name xxoo.xo;
    root /root/web;
    index index.html index.php;
    location / {
        try_files $uri $uri/ /index.php;
    }
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}
重启Nginx和PHP-FPM:
service nginx restart
service php5-fpm restart
把测试网页放到 /root/web/ 就可以了, 在此我们选用一个PHP探针做测试(来自http://www.yahei.net/tz/).
性能测试
应该说两台测试机差异很大, 不是很公平(我也说不好是偏向哪一方) … 大家凑合看
测试用例(5个线程, 请求1000次): ab -n1000 -c5 http://xxoo.xo/probe.php
Nginx + PHP-FPM + APC
QPS:1022 (每秒完成请求)
Nginx + Apache + mod_php
QPS:51