我开发了一个基于 Beancount 的账本托管服务 HostedBeans,欢迎大家来了解纯文本复式记账并试用我的服务。
查看源代码

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

撰写评论

如希望撰写评论,请发邮件至 jysperm@gmail.com 并注明文章标题,我会挑选对读者有价值的评论附加到文章末尾。

精子生于 1995 年,英文 ID jysperm.

订阅推送

通过 Telegram Channel 订阅我的博客日志、产品和项目的动态:

王子亭的博客 @ Telegram


通过邮件订阅订阅我的博客日志、产品和项目的动态(历史邮件):

该博客使用基于  Hexo  的  simpleblock  主题。博客内容使用  CC BY-NC-ND  授权发布。最后生成于 2024-04-08.