[配置笔记]CentOS + nginx + PHP

之前的这篇文章似乎是挖了个坑一直没填,然而每每出现这种情况的时候,都会发现还偏偏总有人通过 Google 搜索过来……一定让不少人失望了,真是过意不去~于是这次重新写一篇,但愿能把坑填上……

和上次略有不同,这次 Linux 发行版是用的 CentOS,因为最近一段时间来其实我接触最多的还是 RHEL,所以就不写 Ubuntu 了。MySQL 也不在本文叙述范围之内,我实际应用的时候是直接 yum install mysql-server 装的,没有什么好说的。

nginx 用了 0.7.x 开发版。php 当然是通过 fastcgi 运行,不过没有用从 lighttpd 里分离出来的 spawn-fcgi,而是用了 php-fpm 这个补丁。

编译安装 nginx

用 yum 安装依赖包

yum install gcc openssl-devel pcre-devel zlib-devel

下载最新版的 nginx,并解压缩。

cd /usr/local/src
wget http://sysoev.ru/nginx/nginx-0.7.53.tar.gz
tar zxvf nginx-0.7.53.tar.gz
rm -rf nginx-0.7.53.tar.gz

编译选项,取自 nginx wiki,这个配置适合 RHEL/CentOS,已经带了几个常用的模块。

cd /usr/local/src/nginx-0.7.53
./configure 
  --prefix=/usr 
  --sbin-path=/usr/sbin/nginx 
  --conf-path=/etc/nginx/nginx.conf 
  --error-log-path=/var/log/nginx/error.log 
  --pid-path=/var/run/nginx/nginx.pid  
  --lock-path=/var/lock/nginx.lock 
  --user=nginx 
  --group=nginx 
  --with-http_ssl_module 
  --with-http_flv_module 
  --with-http_gzip_static_module 
  --http-log-path=/var/log/nginx/access.log 
  --http-client-body-temp-path=/var/tmp/nginx/client/ 
  --http-proxy-temp-path=/var/tmp/nginx/proxy/ 
  --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/
make
make install

由于编译时指定了默认用户和组都为 nginx,所以还要创建一下。

groupadd nginx
useradd -d /home/nginx -g nginx nginx

编译安装 PHP

php-fpm 只有针对 PHP 5.2.8 的补丁,尚不支持最新的 5.2.9,所以只能下载较旧的版本了。

cd /usr/local/src
wget http://hk.php.net/distributions/php-5.2.8.tar.bz2
tar jxvf php-5.2.8.tar.bz2
rm -f php-5.2.8.tar.bz2

下载 php-fpm 补丁

cd /usr/local/src
wget http://php-fpm.anight.org/downloads/head/php-5.2.8-fpm-0.5.10.diff.gz
gzip -cd php-5.2.8-fpm-0.5.10.diff.gz | patch -d php-5.2.8 -p1

配置安装 php

cd /usr/local/src/php-5.2.8
./configure 
  --enable-fastcgi 
  --enable-fpm 
  --with-mysql 
  --with-mcrypt 
  --with-zlib
make
make install

这个参数至少可以运行 wordpress,如果要其他更加复杂的 php 应用,可能需要加入其他 extension。
如果缺少依赖的话,试试这些

yum install mysql-devel libmcrypt-devel zlib-devel libxml2-devel libtool-ltdl-devel

nginx 和 php-fpm 的设置
nginx 的配置文件位于 /ect/nginx/nginx.conf
最好在 http {} 的 最后加入 include vhosts/*.conf;
以后其他 virtual host 可以写在 vhosts 下面
比如 一个 PHPMyAdmin 的配置可以这么写

server {
    listen 80;
    server_name sql.example.net;

    location / {
        index index.php;
        root /var/host/phpMyAdmin;
    }

    location ~ .*.php5?$ {
        include fastcgi_params;
        root /var/host/phpMyAdmin;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass unix:/var/run/php_fcgi.sock;
        fastcgi_index index.php;
    }
}

其中 unix:/var/run/php_fcgi.sock 要和 php-fpm 的配置相对应,php-fpm 的默认配置(/usr/local/etc/php-fpm.conf)也基本上够用了。要修改的大概只有这一段

/var/run/php_fcgi.sock

    -1

    nginx
    nginx
    0666