三、PHP的安装
nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端。
nginx一般是把请求发fastcgi管理进程处理,fascgi管理进程选择cgi子进程处理结果并返回被nginx。
php-fpm工作流程
php-fpm全名是PHP FastCGI进程管理器
php-fpm启动后会先读php.ini,然后再读相应的conf配置文件,conf配置可以覆盖php.ini的配置。
启动php-fpm之后,会创建一个master进程,监听9000端口(可配置),master进程又会根据www.conf去创建若干子进程,子进程用于处理实际的业务。
当有客户端(比如nginx)来连接9000端口时,空闲子进程会自己去accept,如果子进程全部处于忙碌状态,新进的待accept的连接会被master放进队列里,等待fpm子进程空闲;
这个存放待accept的半连接的队列有多长,由 listen.backlog 配置。
1、安装前准备
yum -y install gcc automake autoconf libtool make libicu-devel mysql-devel
yum -y install gcc gcc-c++ glibc curl curl-devel openssl* freetype-devel
yum -y install libmcrypt-devel mhash-devel libxslt-devel libjpeg-devel libpng libpng-devel
yum -y install bzip2 bzip2-devel openldap openldap-devel
cp -frp /usr/lib64/libldap* /usr/lib/
2、下载安装php,这里安装5.6版本的php
[root@Global src]#wget http://cn2.php.net/distributions/php-5.6.34.tar.gz
[root@Global src]#tar zvxf php-5.6.34.tar.gz
[root@Global src]#cd php-5.6.34
[root@Global src]#./configure --prefix=/usr/local/php-fpm --with-config-file-path=/usr/local/php-fpm/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-mysqli=/usr/local/mysql/bin/mysql_config --with-libxml-dir --with-bz2 --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 --disable-ipv6 --with-curl --enable-bcmath --enable-sockets --with-iconv-dir=/usr/local --enable-xml --enable-dom --enable-calendar --with-gettext --with-pdo-mysql=/usr/local/mysql --disable-fileinfo --with-ldap=shared
#make
#make test
#make install
PEAR是PHP扩展与应用库(the PHP Extension and Application Repository)的缩写。它是一个PHP扩展及应用的一个代码仓库。
3、配置环境变量
#vi
/etc/profile
export PATH=$PATH:/usr/local/php-fpm/bin:$PATH
4、执行命令使得改动立即生效
# source /etc/profile
5、配置php-fpm
cp /usr/local/src/php-5.6.34/php.ini-production /usr/local/php-fpm/etc/php.ini
php.ini 文件是php.ini是php运行核心配置文件,PHP 在启动时自动读取的配置文件,它是一个ASCLL 文本文件,分为多个部分,每一部分包括相关的参数。
php.ini 是PHP 的配置文件,用于加载各种函数库、设置错误级别和设置服务器的时间等。
cp
/usr/local/php-fpm/etc/php-fpm
.conf.default
/usr/local/php-fpm/etc/php-fpm
.conf
php-fpm.conf是php-fpm进程服务的配置文件
cp /usr/local/src/php-5.6.34/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod 755 /etc/init.d/php-fpm
6、启动php-fpm
fpm测试php配置 /usr/local/php-fpm/sbin/php-fpm -t
/etc/init
.d
/php-fpm
start
放在最后:
先说说web服务器,php是为web而生的一门后端语言。那么它就必须借助于web服务器,才能提供web功能。当然其他的后端语言如果做web应用,也必须借助于web服务器。好,由php引出了web服务器。
那么常见的web服务器有哪些呢?
- apache
- nginx
- IIS
- lighttpd
- tomcat
上面几种,与php相关联起来用的最多的就是Apache和Nginx了。
我们先举例用apache当作web服务器,来说明一次完整的php访问的情况:
mod_php模式
本质是用LoadModule
来加载php5_module
,就是把php作为apache的一个子模块来运行。当通过web访问php文件时,apache就会调用php5_module
来解析php代码。那么php5_module
是怎么来将数据传给php解析器来解析php代码的呢?答案是通过sapi
所以,以上的apache调用php执行的过程如下:
apache -> httpd -> php5_module -> sapi -> php
mod_fastcgi模式
php的sapi的另一种方式就是提供cgi模式,由于cgi比较老所以就出现了fastcgi来取代它。
简单的说,就是:cgi就是专门用来和web 服务器打交道的。web服务器收到用户请求,就会把请求提交给cgi程序(php的fastcgi),cgi程序根据请求提交的参数作应处理(解析php),然后输出标准的html语句返回给web服服务器,再返回给客户端,这就是普通cgi的工作原理。
cgi的好处就是完全独立于任何服务器,仅仅是做为中间分子。提供接口给apache和php。他们通过cgi搭线来完成。这样做的好处了尽量减少两者的关联,使他们两者变得更独立。
总结一下:php 与 apache 或者 ngix 结合, 会用sapi 提供两种连接方法:mod_php和mod_fastcgi
。mod_php
模式会将php模块安装到apache下面来运行,两者结合度较大。mod_fastcgi
模式则是作为一个中间过程,apache介绍用户请求后,就发送给fastcgi, 再连接php来完成访问。