apache一般是把php当做自己的一个模块来启动的.
而nginx则是把http请求变量(如get,user_agent等)转发给 php进程,即php独立进程,与nginx进行通信. 称为 fastcgi运行方式.
因此,为apache所编译的php,是不能用于nginx的
注意: 我们编译的PHP 要有如下功能:
连接mysql, gd, ttf, 以fpm(fascgi)方式运行
./configure --prefix=/usr/local/php7 \ #安装php的目录
--with-mysql=mysqlnd \
--enable-mysqlnd \
--with-gd \
--enable-gd-native-ttf \
--enable-gd-jis-conv \ (每个斜线后面都要加空格,编译不通过)
--enable-fpm #使php已fastcgi 方式运行,独立进程
"\" 表示在命令行 可以换行,但是每个参数与 \ 之间 要有空格,否则编译完php 在php的安装目录中不会有sbin 目录
================================================================================
编译完之后操作步骤
1、cp /usr/local/src/php-7/php.ini-development /usr/local/php7/lib/php.ini # 拷贝php配置文件
2、cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf #产生 php-fpm 配置文件
开启php-fpm
3、/usr/local/php7/sbin/php-fpm
但是编译php7可能有以下问题
/usr/local/php7/sbin/php-fpm
[02-Jan-2016 01:56:48] WARNING: Nothing matches the include pattern '/usr/local/php/etc/php-fpm.d/*.conf' from /usr/local/php/etc/php-fpm.conf at line 125.
php/etc/php-fpm.d/*.conf' from /usr/local/php/etc/php-fpm.conf at line 125.
[02-Jan-2016 01:55:33] ERROR: No pool defined. at least one pool section must be specified in config file
[02-Jan-2016 01:55:33] ERROR: failed to post process the configuration
[02-Jan-2016 01:55:33] ERROR: FPM initialization failed
-------------------------------------------------------------------------------------
从最初的warning开始追起 大概知道是在/usr/local/php7/etc/php-fpm.d/缺少了一个.conf文件 然后进入此目录
发现有一个 www.conf.default 按照常识应该应该进行如下操作
cp www.conf.default www.conf再次运行/usr/local/php7/sbin/php-fpm
便可以了!!
===============================================
编译完之后再来配置nginx
nginx+php的配置比较简单,核心就一句话---- 把请求的信息转发给9000端口的PHP进程,让PHP进程处理 指定目录下的PHP文件.
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;
}
至此重启nginx 便可以了