这里要先声明一下,针对Nginx的 php安装和针对apache的php安装是有区别的,因
为Nginx中的php是以fastcgi的方式结合nginx的。可以理解为nginx代理了php的fastcgi,
而apache是把php作为自己的模块来调用的。同样的,阿铭建议你使用 5.4版本。PHP 官
方下载地址: http://www.php.net/downloads.php。如下为安装过程
(1)下载PHP源码包
#cd /usr/local/src
#wget http://au1.php.net/distributions/php-5.4.44.tar.bz2
(2)解压源码包,创建账号
#tar jxf php-5.4.44.tar.bz2
#useradd -s /sbin/nologin php-fpm
该账号用来运行php-fpm服务,在LNMP 环境中,php 是以一个服务来提供服务的。
提前安装一些依赖包,尽少避免编译错误
yum install -y libjpeg-devel libxml2-devel openssl openssl-devel bzip2 bzip2-devel libpng libpng-devel freetype freetype-devel epel-release libmcrypt libcurl-devel
yum install -y libmcrypt-devel
(3)配置编译选项
./configure \
--prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--enable-fpm \
--with-fpm-user=php-fpm \
--with-fpm-group=php-fpm \
--with-mysql=/usr/local/mysql \
--with-mysql-sock=/tmp/mysql.sock \
--with-libxml-dir \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-iconv-dir \
--with-zlib-dir \
--with-mcrypt \
--enable-soap \
--enable-gd-native-ttf \
--enable-ftp \
--enable-mbstring \
--enable-exif \
--enable-zend-multibyte \
--disable-ipv6 \
--with-pear \
--with-curl \
--with-openssl
错误信息:
configure: error: Please reinstall the libcurl distribution -
easy.h should be in <curl-dir>/include/curl/
解决办法:
#yum install -y libcurl-devel
(4)编译PHP
#make
在这一步,你通常会遇到一些错误,没有关系,遇到错误是好事,这样可以增加你处理
问题的经验。我同样也遇到了错误:
/usr/bin/ld: cannot find -lltdl
collect2: ld returned 1 exit status
make: *** [sapi/fpm/php-fpm] 错误 1
我是这样解决的:
#yum install -y libtool-ltdl-devel
(5)安装PHP
#make install
以上每一个步骤,如果没有完全执行正确,那么下一步是无法进行的,是否还记得判
断执行是否正确的方法? 使用 echo $? 看结果是否为 “0” , 如果不是,就是没有执行正确。
(6)修改配置文件
#cp php.ini-production /usr/local/php/etc/php.ini
#vim /usr/local/php/etc/php-fpm.conf
把如下内容写入该文件:
[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
[www]
listen = /tmp/php-fcgi.sock
user = php-fpm
group = php-fpm
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
listen.owner = nobody
listen.group = nobody
#slowlog = /tmp/www_slow.log
#request_slowlog_timeout = 5
#php_admin_value[open_basedir]=/data/www/:/tmp/

说明:
global部分是全局配置,指定 pid文件路径以及error_log路径。
[www]是一个pool,我们其实还可以再写第二个pool,第二个pool和第一个不一样的
地方,首先pool的name,比如叫做[www2]。然后 listen肯定就不能一样了,比如可以 listen
= /tmp/php-fcgi2.sock。而 user,group也可以和[www]中定义的不一样。listen.owner这个是
定义/tmp/php-fcgi.sock 这个文件的所有者是谁,在php5.4版本之后监听的socket文件权限
默认编程了rw-------,如果不定义 listen.owner那么 nginx调用这个socket的时候就没有权限
了,故在这里我们定义 listen.owner为 nginx的子进程监听用户。
pm = dynamic 表示以动态的形式启动,在 php5.3版本以后它可以支持动态和静态了,
如果是静态,即pm=static 时,下面的配置只有pm.max_children管用。
pm.max_children 表示启动几个 php-fpm的子进程。如果是 dynamic,下面的配置会生效,
pm.max_children 表示最大可以启动几个子进程。
pm.start_servers表示一开始启动几个子进程。
pm.min_spare_servers表示当 php-fpm空闲时最少要有几个子进程,即如果空闲进程小
于此值,则创建新的子进程。 pm.max_spare_server表示当 php-fpm空闲时最多有几个子进程,
即如果空闲进程大于此值,则会进行清理。
pm.max_requests表示一个子进程最多可以接受多少个请求,比如设置为 500那么一个
子进程受理500个请求后自动销毁。
rlimit_files表示每个子进程打开的多少个文件句柄。

保存配置文件后,检验配置是否正确的方法为:
#/usr/local/php/sbin/php-fpm -t

如果出现诸如 “test is successful” 字样,说明配置没有问题,否则就要根据提示检查配
置文件是否有问题。
(7)启动php-fpm
首先要拷贝一个启动脚本到/etc/init.d/下
#cp /usr/local/src/php-5.3.27/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
给它更改权限为755
#chmod 755 /etc/init.d/php-fpm
#service php-fpm start
如果想让它开机启动,执行:
#chkconfig php-fpm on
检测是否启动:
#ps aux |grep php-fpm
看看是不是有很多个进程(大概 20多个)。