Nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端。
Nginx一般是把请求发fastcgi管理进程处理,fascgi管理进程选择cgi子进程处理结果并返回被Nginx。
以php-fpm为例介绍如何使Nginx支持PHP
PHP-FPM是一个PHP FastCGI管理器,只适用于PHP。
PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。
新版PHP已经集成php-fpm了,不再是第三方的包,推荐使用。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程,可以平滑重载PHP配置,比spawn-fcgi具有更多优点,所以被PHP官方收录了。在./configure的时候带–enable-fpm参数即可开启PHP-FPM。
[root@iZm5e4blwrqoe0dh9gcyluZ /usr/local/src]#
./configure --prefix=/usr/local/php \
--with-config-file-scan-dir=/etc/php.d \
--with-apxs2=/jl/apache2/bin/apxs \
--with-config-file-path=/etc \
--with-pdo-mysql=mysqlnd \
--enable-mbstring \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--with-openssl \
--enable-xml \
--enable-sockets \
--enable-fpm \
--with-bz2 \
--with-pgsql=shared \
--with-pdo-pgsql=shared \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-gd \
--enable-session
安装PHP时,加上上面红色字体的参数"–enable-fpm"。
[root@iZm5e9844shvuaar7ihzzfZ /root]#find / -name php-fpm
上图红框就是我们要找的文件的目录。
[root@iZm5e9844shvuaar7ihzzfZ /root]#cd /usr/local/php/sbin
[root@iZm5e9844shvuaar7ihzzfZ /usr/local/php/sbin]#./php-fpm
执行时出现报错。
把文件"php-fpm.conf.default"拷贝过来就可以了。
[root@iZm5e9844shvuaar7ihzzfZ /usr/local/php/sbin]#cd /usr/local/php/etc
[root@iZm5e9844shvuaar7ihzzfZ /usr/local/php/etc]#cp php-fpm.conf.default php-fpm.conf
继续执行php-fpm命令。
[root@iZm5e9844shvuaar7ihzzfZ /usr/local/php/etc]#cd /usr/local/php/sbin
[root@iZm5e9844shvuaar7ihzzfZ /usr/local/php/sbin]#./php-fpm
又出现报错。
拷贝"/usr/local/php/etc/php-fpm.d/"目录下文件就是了。
[root@iZm5e9844shvuaar7ihzzfZ /usr/local/php/sbin]#cd /usr/local/php/etc/php-fpm.d
[root@iZm5e9844shvuaar7ihzzfZ /usr/local/php/etc/php-fpm.d]#cp www.conf.default www.conf
继续执行php-fpm命令。
[root@iZm5e9844shvuaar7ihzzfZ /usr/local/php/etc/php-fpm.d]#cd /usr/local/php/sbin
[root@iZm5e9844shvuaar7ihzzfZ /usr/local/php/sbin]#./php-fpm
没有报错,成功执行。
查看系统是不是有php-fpm的进程。
[root@iZm5e9844shvuaar7ihzzfZ /usr/local/php/sbin]#ps -ef | grep php-fpm