网站搜索

如何在 16.10/16.04 中安装 Nginx、MariaDB 10、PHP 7 (LEMP Stack)


LEMP 堆栈是一个缩写词,代表一组软件包(Linux 操作系统、Nginx Web 服务器、MySQL\MariaDB 数据库和 PHP 服务器端动态编程语言),用于部署动态 Web 应用程序和网页。

本教程将指导您如何安装具有 MariaDB 10PHP 7HTTP 2.0 支持 Nginx 的 LEMP 堆栈在 Ubuntu 16.10Ubuntu 16.04 服务器/桌面版本上。

要求

  1. Ubuntu 16.04 服务器版的安装 [说明也适用于 Ubuntu 16.10]

第 1 步:安装 Nginx Web 服务器

1. Nginx 是一种现代且资源高效的 Web 服务器,用于向互联网上的访问者显示网页。我们将首先使用 apt 命令行从 Ubuntu 官方存储库安装 Nginx Web 服务器。

sudo apt-get install nginx

2. 接下来,发出 netstat 和 systemctl 命令以确认 Nginx 是否已启动并绑定在端口 80 上。

netstat -tlpn

sudo systemctl status nginx.service

一旦确认服务器已启动,您可以打开浏览器并使用 HTTP 协议导航到您的服务器 IP 地址或 DNS 记录,以便访问 Nginx 默认网页。

http://IP-Address

步骤2:启用Nginx HTTP/2.0协议

3. HTTP/2.0 协议默认构建在 Ubuntu 16.04 上最新版本的 Nginx 二进制文件中,只能与 SSL 结合使用承诺大幅提高加载 Web SSL 网页的速度。

要在 Ubuntu 16.04 上的 Nginx 中启用该协议,首先导航到 Nginx 可用站点配置文件,并通过发出以下命令备份默认配置文件。

cd /etc/nginx/sites-available/
sudo mv default default.backup

4. 然后,使用文本编辑器按照以下说明创建一个新的默认页面:

server {
        listen 443 ssl http2 default_server;
        listen [::]:443 ssl http2 default_server;

        root /var/www/html;

        index index.html index.htm index.php;

        server_name 192.168.1.13;

        location / {
                try_files $uri $uri/ =404;
        }

        ssl_certificate /etc/nginx/ssl/nginx.crt;
        ssl_certificate_key /etc/nginx/ssl/nginx.key;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
        ssl_dhparam  /etc/nginx/ssl/dhparam.pem;
        ssl_session_cache shared:SSL:20m;
        ssl_session_timeout 180m;
        resolver 8.8.8.8 8.8.4.4;
        add_header Strict-Transport-Security "max-age=31536000;
        #includeSubDomains" always;


        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        }

        location ~ /\.ht {
                deny all;
        }

}

server {
       listen         80;
       listen    [::]:80;
       server_name    192.168.1.13;
       return         301 https://$server_name$request_uri;
}

上面的配置片段通过将 http2 参数添加到所有 SSL 侦听指令来启用 HTTP/2.0 的使用。

此外,服务器指令中摘录的最后一部分用于将所有非 SSL 流量重定向到 SSL/TLS 默认主机。另外,替换 server_name 指令以匹配您自己的 IP 地址或 DNS 记录(最好是 FQDN)。

5. 使用上述设置完成 Nginx 默认配置文件的编辑后,通过执行以下命令生成并列出 SSL 证书文件和密钥。

使用您自己的自定义设置填写证书,并注意通用名称设置以匹配您的 DNS FQDN 记录或将用于访问网页的服务器 IP 地址。

sudo mkdir /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt
ls /etc/nginx/ssl/

6. 另外,创建一个强DH密码,通过发出以下命令,在 ssl_dhparam 指令行上的上述配置文件中更改该密码:

sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

7. 创建 Diffie-Hellman 密钥后,验证 Nginx 配置文件是否正确写入并且可以由 Nginx Web 服务器应用,并重新启动守护进程以反映更改:运行以下命令。

sudo nginx -t
sudo systemctl restart nginx.service

8. 为了测试 Nginx 是否使用 HTTP/2.0 协议,请发出以下命令。 h2 广告协议的存在确认 Nginx 已成功配置为使用 HTTP/2.0 协议。所有现代的最新浏览器都应该默认支持此协议。

openssl s_client -connect localhost:443 -nextprotoneg ''

步骤 3:安装 PHP 7 解释器

Nginx 可以与 PHP 动态处理语言解释器一起使用,借助 FastCGI 进程管理器生成动态 Web 内容,FastCGI 进程管理器是通过安装 Ubuntu 官方存储库中的 php-fpm 二进制包获得的。

9. 为了获取 PHP7.0 以及允许 PHP 与 Nginx Web 服务器通信的附加软件包,请在服务器控制台上发出以下命令:

sudo apt install php7.0 php7.0-fpm 

10. 一旦 PHP7.0 解释器成功安装在您的计算机上,通过发出以下命令启动并检查 php7.0-fpm 守护进程命令:

sudo systemctl start php7.0-fpm
sudo systemctl status php7.0-fpm

11. Nginx的当前配置文件已经配置为使用PHP FastCGI进程管理器来服务器动态内容。

下面摘录了使 Nginx 能够使用 PHP 解释器的服务器块,因此不需要进一步修改默认的 Nginx 配置文件。

location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        }

下面是在原始 Nginx 默认配置文件的情况下需要取消注释和修改的指令的屏幕截图。

12. 要测试 Nginx Web 服务器与 PHP FastCGI 进程管理器的关系,请通过发出以下命令创建 PHP info.php 测试配置文件,并通过访问此配置文件来验证设置使用以下地址:http://IP_or domain/info.php

sudo su -c 'echo "<?php phpinfo(); ?>" |tee /var/www/html/info.php'

另外,还可以通过在 PHP 变量块上找到 $_SERVER[‘SERVER_PROTOCOL’] 行来检查服务器是否公布了 HTTP/2.0 协议,如下面的屏幕截图所示。

13. 要安装额外的 PHP7.0 模块,请使用 apt search php7.0 命令查找 PHP 模块并安装它。

另外,请尝试安装以下 PHP 模块,如果您计划安装 WordPress 或其他 CMS,这些模块会派上用场。

sudo apt install php7.0-mcrypt php7.0-mbstring

14. 要注册 PHP 额外模块,只需通过发出以下命令重新启动 PHP-FPM 守护进程。

sudo systemctl restart php7.0-fpm.service

第4步:安装MariaDB数据库

15.最后,为了完成我们的LEMP堆栈,我们需要 MariaDB 数据库组件来存储和管理网站数据。

通过运行以下命令安装MariaDB数据库管理系统并重新启动PHP-FPM服务,以便使用MySQL模块访问数据库。

sudo apt install mariadb-server mariadb-client php7.0-mysql
sudo systemctl restart php7.0-fpm.service

16. 为了确保 MariaDB 安装的安全,请运行 Ubuntu 存储库中的二进制包提供的安全脚本,该脚本会要求您设置 root 密码、删除匿名用户、禁用远程 root 登录并删除测试数据库。

通过发出以下命令来运行脚本并用 yes 回答所有问题。使用下面的屏幕截图作为指导。

sudo mysql_secure_installation

17.要配置MariaDB,使普通用户无需系统sudo权限即可访问数据库,请使用root权限进入MySQL命令行界面,并在MySQL解释器上运行以下命令:

sudo mysql 
MariaDB> use mysql;
MariaDB> update user set plugin=’‘ where User=’root’;
MariaDB> flush privileges;
MariaDB> exit

最后,登录 MariaDB 数据库并通过执行以下命令在没有 root 权限的情况下运行任意命令:

mysql -u root -p -e 'show databases'

仅此而已!现在,您已在 Ubuntu 16.10Ubuntu 16.04 服务器上配置了 LEMP 堆栈,允许您部署可与数据库交互的复杂动态 Web 应用程序。