青蛙学Linux—Nginx配置PHP支持

1、安装PHP

PHP可以使用YUM安装,也可以通过源码包自行编译安装。使用YUM安装PHP可能会存在版本过低的问题,所以这里我们使用从PHP官网(www.php.net)上下载的源码包进行安装,版本为7.1.25(随机选择的版本)。

1.1、安装依赖环境

安装PHP前必须先安装以下依赖包,依赖包可以通过YUM进行安装:

[root@localhost apps]# yum install php-mcrypt libmcrypt libmcrypt-devel  autoconf  freetype freetype-devel gd libmcrypt libpng libpng-devel openjpeg openjpeg-devel  libjpeg libjpeg-devel  libxml2 libxml2-devel zlib curl curl-devel

1.2、编译安装PHP

将下载的PHP源码包解压后,进入PHP目录,运行(将PHP安装到/usr/local/php7目录下):

[root@localhost php-7.1.25]# ./configure 
> --prefix=/usr/local/php7 
> --enable-fpm                 # 开启PHP-FPM,Nginx通过FPM与PHP集成
> --with-fpm-user=nginx        # 定义启动FPM的用户
> --with-fpm-group=nginx       # 定义启动FPM的组
> --with-pdo-mysql=mysqlnd     # 定义PHP连接MySQL的驱动组件
> --with-mysqli=mysqlnd        # 定义PHP连接MySQL的驱动组件
> --with-zlib                  # 开启zlib支持
> --with-curl                  # 开启curl支持
> --with-gd                    # 开启gd库支持
> --with-jpeg-dir              # 开启jpeg图片支持
> --with-png-dir               # 开启png图片支持
> --with-freetype-dir          # 开启freetype字体库支持
> --with-openssl               # 开启openssl支持
> --enable-mbstring            # 开启mbstring扩展
> --enable-xml                 # 开启XML支持
> --enable-session             # 开启session
> --enable-ftp                 # 开启FTP支持
> --enable-pdo                 # 开启PDO
> --enable-tokenizer           # 开启tokenizer扩展
> --enable-zip                  # 开启ZIP支持

更多的./configure参数可以使用./configure --help命令查看。

在configure进行完毕无报错后,使用以下命令进行安装:

[root@localhost php-7.1.25]# make && make install

安装完成后,接下来需要复制PHP的配置文件到安装目录。PHP的配置文件位于源码包中,有以下两个文件:

php.ini-development    # 开发环境
php.ini-production     # 生产环境

这里将PHP用于生产环境的配置文件复制到安装目录:

[root@localhost php-7.1.25]# cp php.ini-production /usr/local/php7/lib/php.ini

因为我们需要使用PHP-FPM与Nginx进行集成,这里可以将PHP-FPM的服务文件加入系统服务中,以便进行管理:

CentOS 6.x(init)

[root@localhost php-7.1.25]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@localhost php-7.1.25]# chmod 755 /etc/init.d/php-fpm

CentOS 7.x(systemd)

[root@localhost php-7.1.25]# cp sapi/fpm/php-fpm.service /usr/lib/systemd/system

1.3、额外的:pdo和mysqlnd

configure中的参数--with-pdo-mysql=mysqlnd表示在连接MySQL时使用的时mysqlnd驱动。这里涉及了两个概念,pdo和mysqlnd。

PDO,PHP Data Objects,是PHP应用中的一个数据库抽象层规范。PDO提供了一个统一的API接口使得PHP应用可以不用去关心具体连接的是什么数据库。PDO的使用使得可以在任意需要的时候无缝切换后端数据库。

mysqlnd,MySQL Native Driver,是由PHP官方提供的用于连接MySQL数据库的驱动,用于替换由MySQL官方开发的libmysql。从PHP 5.3版本开始已经不推荐使用libmysql,在PHP 7.x的版本中libmysql已经被移除了,所以在PHP 7.x中,--with-mysql=mysqlnd的写法已经被废除了。另外,由于mysqlnd内置于PHP源码中,所以在编译安装PHP时不需要先安装好MySQL。

--with-mysqli=mysqlnd中的mysqli是MySQL增强扩展,也是PHP连接MySQL的一种方式,这里也使用mysqlnd驱动。

2、PHP-FPM

PHP-FPM是一个第三方的FastCGI进程管理器,最先是作为PHP的一个补丁来开发的,现在PHP-FPM已经集成在PHP源码中,用于替换PHP FastCGI的大部分附加功能,对于高负载网站是非常有用的。

PHP-FPM包含一个master和多个worker进程(worker进程数量在配置文件中定义)。master主要负责监听端口,接收来自Web server的请求;而worker进程内部拥有一个PHP解释器,是PHP代码真正执行的地方。

PHP-FPM的配置文件位于PHP安装目录下的etc目录中,文件名为php-fpm.conf.default,要使用时去掉.default即可:

[root@localhost etc]# cp php-fpm.conf.default php-fpm.conf

该配置文件中的内容大部分都被注释掉了,仅有下面一句生效:

include=/usr/local/php7/etc/php-fpm.d/*.conf

表示加载PHP安装目录下的/etc目录下的子目录php-fpm.d中的.conf配置文件。我们进入该目录,默认该目录下有一个名为www.conf.default的文件,我们首先启用该文件:

[root@localhost php-fpm.d]# cp www.conf.default www.conf

我们来看下该文件中的内容,该文件中的大部分内容也被注释掉了,生效的部分如下:

[www]
user = nginx             # 启动PHP-FPM的用户
group = nginx            # 启动PHP-FPM的组
listen = 127.0.0.1:9000  # PHP-FPM监听的IP和端口
pm = dynamic             # 定义PHP-FPM进程池开启进程的方式,有静态static和动态dynamic
pm.max_children = 5      # 在static方式下表示开启的进程数,dynamic方式下表示开启的最大进程数
pm.start_servers = 2     # dynamic方式下初始开启的进程数
pm.min_spare_servers = 1 # dynamic方式下在空闲状态中开启的最小进程数
pm.max_spare_servers = 3 # dynamic方式下在空闲状态中开启的最大进程数,这个值只能小于等于pm.max_children

启动PHP-FPM

当前系统为CentOS 7.6.1810,且已经将PHP-FPM添加到系统服务管理中了,所以使用以下命令启动PHP-FPM:

[root@localhost php-fpm.d]# systemctl start php-fpm

3、Nginx使用PHP-FPM

Nginx要通过PHP-FPM使用PHP,同样是通过反向代理来进行的,只是这里的反向代理使用的是FastCGI协议。

打开Nginx的配置文件,里面默认有一段关于PHP-FPM的配置:

# 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  /scripts$fastcgi_script_name;
#    include        fastcgi_params;
#}

该段配置默认是注释状态,只要取消注释即可使用。这里需要注意的是fastcgi_param,定义的是PHP文件的路径。

我们把这段配置取消注释,并将fastcgi_param的路径修改为$document_root$fastcgi_script_name,然后在html目录下创建一个文件名为info.php的PHP文件,文件内容为:

<?php phpinfo(); ?>

访问http://192.168.0.110/info.php:

1

至此,Nginx支持PHP环境配置成功。

原文地址:https://www.cnblogs.com/yu2006070-01/p/10231796.html