这里要先声明一下,针对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多个)。