如何在 16.10/16.04 中安装 Nginx、MariaDB 10、PHP 7(LEMP 堆栈)
LEMP堆栈是一个首字母缩写词,代表一组用于部署动态 Web 应用程序和网页的软件包(Linux 操作系统、Nginx Web 服务器、MySQL\MariaDB 数据库和 PHP 服务器端动态编程语言)。
本教程将指导您如何在Ubuntu 16.10和Ubuntu 16.04服务器/桌面版上安装带有MariaDB 10、PHP 7和HTTP 2.0支持的LEMP堆栈。
要求
- 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. Ubuntu 16.04上最新版本的 Nginx 二进制文件中默认构建的HTTP/2.0协议仅与 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; }
上述配置片段通过将参数添加到所有 SSL 侦听指令来启用HTTP/2.0 。http2
此外,服务器指令中摘录的最后一部分用于将所有非 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 动态处理语言解释器一起使用,在从 Ubuntu 官方存储库安装php-fpm二进制包后获得的 FastCGI 进程管理器的帮助下生成动态 Web 内容。
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 进程管理器的关系,请info.php
通过发出以下命令创建一个 PHP 测试配置文件,然后通过使用以下地址访问此配置文件来验证设置:http://IP_or domain/info.php
。
$ sudo su -c 'echo "<?php phpinfo(); ?>" |tee /var/www/html/info.php'
还可以通过定位 PHP 变量块上的行来检查服务器是否宣传HTTP/2.0$_SERVER[‘SERVER_PROTOCOL’]
协议,如下面的屏幕截图所示。
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.10和Ubuntu 16.04服务器上配置了LEMP堆栈,它允许您部署可以与数据库交互的复杂动态 Web 应用程序。