一、编译安装php-fpm

什么是PHP-FPM

PHP-FPM是一个PHP FastCGI管理器,是只用于PHP的,可以在 http://php-fpm.org/download下载得到.

PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。

新版PHP已经集成php-fpm了,不再是第三方的包了,推荐使用。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多优点,所以被PHP官方收录了。在./configure的时候带 –enable-fpm参数即可开启PHP-FPM,其它参数都是配置php的,具体选项含义可以查看这里。

安装前准备
centos下执行

yum -y install gcc automake autoconf libtool make

yum -y install gcc gcc-c++ glibc

yum -y install libmcrypt-devel mhash-devel libxslt-devel \
libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel \
zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel \
ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel \
krb5 krb5-devel libidn libidn-devel openssl openssl-devel


#使用wget可以通过以下路径下载

wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/attic/libmcrypt/libmcrypt-2.5.7.tar.gz   
#解压  
tar -zxvf libmcrypt-2.5.7.tar.gz   
#进入目录  
cd libmcrypt-2.5.7 
#编译(默认安装到/usr/local/lib/)  
./configure --prefix=/usr/local/libmcrypt 
#执行安装  
make && make install


yum install libXpm-devel


wget http://cn2.php.net/distributions/php-5.4.7.tar.gz
tar zvxf php-5.4.7.tar.gz
cd php-5.4.7
./configure --prefix=/usr/local/php  --enable-fpm --with-mcrypt \
--enable-mbstring --disable-pdo --with-curl --disable-debug  --disable-rpath \
--enable-inline-optimization --with-bz2  --with-zlib --enable-sockets \
--enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex \
--with-mhash --enable-zip --with-pcre-regex --with-mysql --with-mysqli \
--with-gd --with-jpeg-dir

make all install

安装后内容放在/usr/local/php目录下

下面是对php-fpm运行用户进行设置

cd /usr/local/php
cp etc/php-fpm.conf.default etc/php-fpm.conf
vi etc/php-fpm.conf

修改
user = www-data
group = www-data

如果www-data用户不存在,那么先添加www-data用户
groupadd www-data
useradd -g www-data www-data

二、编译安装nginx

三、修改nginx配置文件以支持php-fpm

nginx安装完成后,修改nginx配置文件为,nginx.conf

其中server段增加如下配置,注意标红内容配置,否则会出现No input file specified.错误

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

四、创建测试php文件

创建php文件

在/usr/local/nginx/html下创建index.php文件,输入如下内容

<?php
    echo phpinfo();
?>

五、启动服务

启动php-fpm和nginx


/usr/local/php/sbin/php-fpm


/usr/local/nginx/nginx


php 5.4.7 下的php-fpm 不再支持 php-fpm 以前具有的 /usr/local/php/sbin/php-fpm (start|stop|reload)等命令,需要使用信号控制:

master进程可以理解以下信号

INT, TERM 立刻终止 QUIT 平滑终止 USR1 重新打开日志文件 USR2 平滑重载所有worker进程并重新载入配置和二进制模块

示例:

php-fpm 关闭:

kill -INT `cat /usr/local/php/var/run/php-fpm.pid`

php-fpm 重启:

kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`

查看php-fpm进程数:

ps aux | grep -c php-fpm


附:

php gd库的安装与配置。

完整步骤如下,大家参考下。

1,安装zlib,一般Centos系统自带已经安装好,可以用以下命令去查看:
 

代码示例:

[root@xxx ~]# rpm -qa | grep zlib
zlib-1.2.1.2-1.2
zlib-devel-1.2.1.2-1.2
You have new mail in /var/spool/mail/root

不存在的话,请手动下载编译:http://ishare.iask.sina.com.cn/f/15275772.html
 

代码示例:

tar zxvf zlib-1.2.2.tar.gz
  cd zlib-1.2.2
  ./configure
  make
  make install

2,安装libpng http://sourceforge.net/projects/libpng/
 

代码示例:

tar zxvf libpng-1.4.2.tar.tar
  cd libpng-1.4.2
./configure
  make
  make install

3.安装freetype http://sourceforge.net/projects/freetype/
 

代码示例:

tar zxvf freetype-2.3.12.tar.gz
  cd freetype-2.3.12

  ./configure
  make
  make install

4,安装Jpeg http://www.ijg.org/
 

代码示例:

tar zxvf jpegsrc.v8b.tar.gz
  cd jpeg-8b/

  ./configure --enable-shared
  make
  make test
  make install
 

注意,这里configure一定要带--enable-shared参数,不然,不会生成共享库。

5,安装GD https://bitbucket.org/pierrejoye/gd-libgd/downloads
 

代码示例:

tar zxvf gd-2.0.33.tar.gz
  cd gd-2.0.33
  ./configure --with-png --with-freetype --with-jpeg

make
make install

6,安装PHP php-5.2.11.tar.gz
 

代码示例:

tar zxvf php-5.2.11.tar.gz
cd php-5.2.11
./configure选项见下方

make
make install

注:
 

代码示例:

/usr/local/include/freetype2/freetype
freetype

/usr/local/include/include
t1lig

/usr/local/include/libpng14/
png

/usr/local/include
jpeg

[root@xxx php-5.2.11]# ./configure --help | grep t1lib
  --with-t1lib[=DIR]        GD: Include T1lib support. T1lib version >= 5.0.0 required
[root@xxx php-5.2.11]# ./configure --help | grep png
  --with-png-dir[=DIR]      GD: Set the path to libpng install prefix
[root@xxx php-5.2.11]# ./configure --help | grep jpeg
  --with-jpeg-dir[=DIR]     GD: Set the path to libjpeg install prefix
[root@xxx php-5.2.11]# ./configure --help | grep freetype
  --with-freetype-dir[=DIR] GD: Set the path to FreeType 2 install prefix
[root@xxx php-5.2.11]#


./configure --prefix=/opt/php5 --with-apxs2=/opt/apache/bin/apxs --with-mysql=/usr/local/mysql --with-config-file-path=/opt/php5/lib --with-gd --with-zlib --with-png-dir=/usr/local/include/libpng14/  --with-jpeg-dir=/usr/local/include  --with-freetype-dir=/usr/local/include/freetype2/freetype (--with-t1lib  --with-t1lib-dir=/usr/local/include/include)


./configure --prefix=/usr/local/php --enable-fpm --with-mcrypt --enable-mbstring --with-pdo-mysql --with-curl --disable-debug --disable-rpath --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --with-mhash --enable-zip --with-pcre-regex --with-mysql --with-mysqli --enable-opcache=no --enable-zip=no --with-gd=/usr/local/include/ --with-png-dir=/usr/local/include/libpng16/ --with-freetype-dir=/usr/local/include/freetype2/ --with-jpeg-dir=/usr/local/include/ --with-xpm-dir=/usr/lib64


./configure  --prefix=/usr/local/php --enable-fpm --with-mcrypt --enable-mbstring --with-pdo-mysql --with-curl --disable-debug --disable-rpath --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --with-mhash --enable-zip --with-pcre-regex --with-mysql --with-mysqli --enable-opcache=no --enable-zip=no --with-gd=/usr/local/include/ --with-png-dir=/usr/local/include/libpng16/ --with-freetype-dir=/usr/local/include/freetype2/ --with-jpeg-dir=/usr/local/include/ --with-xpm-dir=/usr/lib64 --with-openssl


最后只有T1Lib Support没有启用。

GD库支持最终如下:
 

gd
GD Support  enabled 
GD Version  bundled (2.0.34 compatible) 
FreeType Support  enabled 
FreeType Linkage  with freetype 
FreeType Version  2.3.12 
GIF Read Support  enabled 
GIF Create Support  enabled 
JPG Support  enabled 
PNG Support  enabled 
WBMP Support  enabled 
XBM Support  enabled

在apache配置文件中添加:
 

代码示例:

Listen 81
#
# Dynamic Shared Object (DSO) Support
#
# To be able to use the functionality of a module which was built as a DSO you
# have to place corresponding `LoadModule' lines at this location so the
# directives contained in it are actually available _before_ they are used.
# Statically compiled modules (those listed by `httpd -l') do not need
# to be loaded here.
#
# Example:
# LoadModule foo_module modules/mod_foo.so
LoadModule php5_module        modules/libphp5.so

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
#

<IfModule !mpm_netware_module>

在htdocs目录中创建测试文件info.php:
 

代码示例:

[root@xxx apache]# cat htdocs/info.php
<?php
 echo phpinfo();
?>
 

然后,在浏览器中访问该文件,可查询GD库支持的情况。