豫ICP备17040950号-2

CentOS7装PHP7及配置NGINX支持PHP和PATH_INFO

文章目录
  1. 1. 安装PHP和PHP-FPM
  2. 2. 配置 NGINX与PHP互通

以下为CentOS7安装PHP7以上版本及配置NGINX支持PHP和PATH_INFO的操作步骤:

安装PHP和PHP-FPM


php7的效率要比之前的php版本高出30%左右,因此有必要升级,但是直接手动编译php7相对比较麻烦,用户可以参考如下方法直接通过yum进行安装。

删除之前的php版本

1
yum remove php * php-common

由于linux的yum源不存在php7.x,所以我们要更改yum源:

1
2
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

查看yum源中有没有php7.x

1
yum search php7

php7.0.x对应yum search php70w和yum install php70w
php7.1.x对应yum search php71w和yum install php71w
php7.2.x对应yum search php72w和yum install php72w

yum 安装php72w和各种拓展,选自己需要的即可:

1
yum -y install php72w php72w-cli php72w-common php72w-devel php72w-embedded php72w-fpm php72w-gd php72w-mbstring php72w-mysqlnd php72w-opcache php72w-pdo php72w-xml

*如果安装php-fpm,必须包含install php72w-fpm php72w-opcache

安装完成,查看php版本

1
php -v

配置php.ini

1
vi /etc/php.ini 

启动php-fpm

1
2
systemctl start php-fpm

开机启动php-fpm设置

1
2
3
systemctl enable php-fpm
systemctl daemon-reload

配置 NGINX与PHP互通


修改 /etc/nginx/nginx.conf
默认情况下,nginx是不支持php和path_info的,我们需要做些配置让它支持,关于nginx的其他配置信息不再复述,只来说下server中的设置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server{
listen 80;
server_name 127.0.0.1;
root /web/project;
location / {
index index.php;
}
location ~ \.php(.*)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
include fastcgi_params;
}
}

首先来说下root,在server里面可以定义root,在location里面也可以定义root,区别在于定义在location里面的root不可以作用于其他的location中,$document_root指的是定义在server中的root,如果未定义,默认为nginx安装目录下的html文件夹。
如果只是单纯的想要支持php,location可以简化为如下

1
2
3
4
5
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

但是如果要支持path_info,就需要更改配置

  1. ~ .php改为~ .php(.*),因为要接收.php后面的参数,不能让它被当做目录处理。
  2. 添加fastcgi_split_path_info,该参数后面需指定正则表达式,而且必须要有两个捕获,第一个捕获将会重新赋值给$fastcgi_script_name,第二个捕获将会重新赋值给$fastcgi_path_info。
  3. 添加fastcgi_param PATH_INFO,值为$fastcgi_path_info。