Ubuntu 16.04 搭建nginx + PHP7.1

安装软件

nginx

nginx的官方仓库提供最新的稳定版nginx,通过该方法安装的话首先要添加nginx官方仓库的key:

wget http://nginx.org/keys/nginx_signing.key
apt-key add nginx_signing.key

此时可删去该key文件。然后向系统更新源添加两行:

echo "deb http://nginx.org/packages/ubuntu/ xenial nginx" >>/etc/apt/sources.list
echo "deb-src http://nginx.org/packages/ubuntu/ xenial nginx" >>/etc/apt/sources.list

保存文件后,先卸载旧版本nginx再执行安装命令:

apt update
apt remove nginx
apt autoremove
apt install nginx

测试下nginx是否正确安装:

nginx -v

PHP

为了安装PHP7.1,需要先添加Ondřej Surý为Ubuntu维护的PPA源:

add-apt-repository ppa:ondrej/php

如果提示找不到命令add-apt-repository,则需要执行以下命令安装其相关组件:

apt-get install software-properties-common

如果添加PPA源时出现编码错误,则需要通过以下命令来指定编码:

LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php

然后更新软件包:

apt update

安装PHP7:

apt install php7.1-fpm

现在PHP7和PHP7-fpm已经安装了,如果你需要使用MySQL等组件,需要安装以下扩展:

apt install php7.1-mysql php7.1-cli php7.1-gd php7.1-json php7.1-mbstring

我们可以查看PHP版本来测试PHP7.1是否已经正确安装:

php -v

至此,PHP7已安装完毕。

配置软件

nginx

现在需要在nginx默认配置文件或者其它网站配置文件中配置FastCGI来连接PHP-FPM。

执行以下命令来编辑网站配置文件(需要先安装vim):

vim /etc/nginx/conf.d/test.conf

修改或者新增以下内容:

server {
    listen 80;
    server_name your_host_name;
    root /home/www/your_host_directory;
    index index.html index.php;    

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        if (!-f $document_root$fastcgi_script_name) {
            return 404;
        }
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass unix:/run/php/php7.1-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}

php7.1-fpm

因为php7.1-fpm默认只允许用户www-data访问自己,而新版nginx的进程所属用户已改为nginx,所以nginx没有权限访问php7.1-fpm导致502 Bad Gateway错误。我们要在/etc/php/7.1/fpm/pool.d/www.conf中把“允许访问的用户”改正即可。
编辑配置文件:

vim /etc/php/7.1/fpm/pool.d/www.conf

找到以下两行:

listen.owner = www-data
listen.group = www-data

将其按如下两行修改,保存即可。

listen.owner = nginx
listen.group = nginx

然后重启nginx和php7.1-fpm:

service nginx restart
service php7.1-fpm restart

测试软件

在nginx默认的网页文件目录新建一个info.php,调用phpinfo()函数来查看PHP信息:

vim /home/www/your_host_directory/info.php 

放入代码:

<?php
phpinfo();
?>

如果能出现类似页面则nginx+PHP7.1已成功运作:
sample


Reference: