在AWS ubuntu16.04环境中搭建nginx和PHP7.2环境,并更改文档根目录

为了什么

实施的目标

达到的目标

所追求的目的

最终目标

刚刚 LPIC Level 1 考过的 Linux 初学者决定练习在 AWS 上搭建一个 Web 服务器,于是尝试执行了一下。
由于特别是 nginx 的配置文件没做好,遇到了一些困难,所以我将一些内容整理成备忘录。
另外,为了之后安装 WordPress,也整理了一下修改 nginx 文档根目录的方法。

服务器操作系统

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.4 LTS"

安装PHP7.2

安装PHP7.2和PHP-FPM。据说要安装PHP-FPM以便将nginx与PHP协同使用。

# add-apt-repository ppa:ondrej/php
# apt-get update
# apt-get install php7.2 php7.2-fpm php7.2-mysql php7.2-mbstring php7.2-zip

安装nginx

据说,虽然可以从ubuntu1的初始存储库中进行安装,但版本可能会变得过时。

$ curl http://nginx.org/keys/nginx_signing.key | sudo apt-key add -
$ VCNAME=`cat /etc/lsb-release | grep DISTRIB_CODENAME | cut -d= -f2` && sudo -E sh -c "echo \"deb http://nginx.org/packages/ubuntu/ $VCNAME nginx\" >> /etc/apt/sources.list"
$ VCNAME=`cat /etc/lsb-release | grep DISTRIB_CODENAME | cut -d= -f2` && sudo -E sh -c "echo \"deb-src http://nginx.org/packages/ubuntu/ $VCNAME nginx\" >> /etc/apt/sources.list"
$ sudo apt-get update
$ sudo apt-get install nginx

设置nginx和PHP-FPM自动启动。

确保在启动操作系统时自动启动nginx和PHP-FPM。

# systemctl enable nginx.service
Synchronizing state of nginx.service with SysV init with /lib/systemd/systemd-sysv-install...
Executing /lib/systemd/systemd-sysv-install enable nginx
# systemctl enable php7.2-fpm.service
Synchronizing state of php7.2-fpm.service with SysV init with /lib/systemd/systemd-sysv-install...
Executing /lib/systemd/systemd-sysv-install enable php7.2-fpm

改变nginx的文档根目录并与PHP-FPM进行协作。

1. Nginx的配置

通过更改nginx的配置文件(/etc/nginx/conf.d/default.conf),可以修改文档根目录并实现与PHP-FPM的配合(因为我发现没有default.conf文件,所以我自己创建了一个)。

server {

  location / {
    root /var/www/html;
    index index.html index.htm index.php;
  }

  location ~ \.php$ {
    root /var/www/html;
    fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
  }

}

可以通过更改根目录来自由地更改root。 默认的根目录是/usr/share/nginx/html。
注意fastcgi_pass根据PHP-FPM的版本而不同。
此外,如果不注释掉/etc/nginx/nginx.conf文件中的
include /etc/nginx/sites-enable/*;
这行代码,它将无法正常工作。(是否会覆盖sites-enable目录的设置呢?)
首先我直接将default.conf的内容追加到/etc/nginx/nginx.conf文件中,但从配置更改的易操作性等角度考虑,我还是创建了default.conf文件。
更改配置文件后,重新启动nginx以使配置生效。

nginx -s reload

2. PHP-FPM的配置

将设置文件中的user和group从www-data更改为nginx。

user = nginx
group = nginx

listen.owner = nginx
listen.group = nginx

修改配置文件后,需要重新启动PHP-FPM以使配置生效。

# systemctl restart php7.2-fpm.service

确认环境是否正确配置。

在文档根目录中创建一个index.php文件,然后输入以下内容。如果在浏览器中能够确认phpinfo,则表示成功!

<?php
phpinfo()

上述内容

参考网站

安装完Ubuntu 16.04后,构建nginx + PHP7.2环境的步骤
在CentOS上通过nginx运行PHP
[备忘录]nginx的文档根目录