如何在 Ubuntu 18.04 上安装 Linux、Nginx、MySQL 和 PHP(LEMP 协议栈

介绍

LEMP软件堆栈是一组软件,可用于服务动态网页和Web应用程序. 这是描述一个 L inux操作系统的缩写,具有 Nginx(发音为** E** ngine-X)的Web服务器。 后端数据存储在 ** M** ySQL数据库中,动态处理由 ** P** HP处理。

本指南展示了如何在Ubuntu 18.04服务器上安装LEMP堆栈。Ubuntu操作系统照顾第一个要求。我们将描述如何将其余的组件加载并运行。

前提条件

在完成本教程之前,您应该在您的服务器上拥有一个常规的非根用户帐户,具有sudo特权。

一旦您有您的用户可用,您已经准备好开始本指南中描述的步骤。

步骤1:安装 Nginx Web 服务器

为了向您的网站访问者显示网页,您将使用现代、高效的网页服务器 Nginx。

在此程序中使用的所有软件都将来自Ubuntu的默认包库,这意味着您将使用apt包管理套件完成所需的安装。

由于这是您第一次在本会话中使用apt,请先更新您的服务器的包索引:

1sudo apt update

接下来,安装服务器:

1sudo apt install nginx

在Ubuntu 18.04 上, Nginx 配置为在安装时启动。

如果您有ufw防火墙运行,如初始安装指南所述,则需要允许连接到 Nginx。

建议您启用最具限制性的配置文件,以便仍然允许您想要的流量. 由于您在本指南中尚未为您的服务器配置 SSL,您只需要允许在端口 `80 上的流量。

通过键入以下内容来启用此功能:

1sudo ufw allow 'Nginx HTTP'

您可以通过检查状态来验证变更:

1sudo ufw status

此命令的输出将显示允许 HTTP 流量:

1[secondary_label Output]
2Status: active
3
4To Action From
5--                         ------      ----
6OpenSSH ALLOW Anywhere
7Nginx HTTP ALLOW Anywhere
8OpenSSH (v6)               ALLOW Anywhere (v6)
9Nginx HTTP (v6)            ALLOW Anywhere (v6)

随着新的防火墙规则的添加,您可以通过访问您的服务器的域名或公共 IP 地址在您的 Web 浏览器中测试服务器是否正在运行。

如果你没有指向你的服务器的域名,而你不知道你的服务器的公共IP地址,你可以通过运行以下命令来找到它:

1ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

这将打印出几个IP地址,您可以在您的网页浏览器中尝试它们。

或者,您可以检查哪个 IP 地址可访问,如从互联网上的其他位置查看:

1curl -4 icanhazip.com

输入您在 Web 浏览器中接收的地址,它将带您到 Nginx 的默认定位页面:

1http://server_domain_or_IP

Nginx default page

如果你收到一个网页,上面写着欢迎来到nginx,那么你已经成功安装了nginx。

步骤2:安装MySQL来管理网站数据

现在你有一个Web服务器,你需要安装MySQL(数据库管理系统)来存储和管理你的网站的数据。

安装MySQL,键入以下命令:

1sudo apt install mysql-server

MySQL 数据库软件已安装,但其配置尚未完成。

为了确保安装,MySQL配备了一个脚本,它会问你是否想要修改一些不安全的默认设置。

1sudo mysql_secure_installation

此脚本将询问您是否想要配置VALIDATE PASSWORD PLUGIN

<$>[warning] 警告: 启用此功能是一种判断呼叫。如果启用,不符合指定的标准的密码将被MySQL错误地拒绝。如果您与自动配置MySQL用户凭证的软件一起使用弱密码,这将导致问题,例如为phpMyAdmin的Ubuntu包。安全地将验证禁用,但您应该始终使用强有力的、独特的密码来配置数据库凭证。

回答Y是的,或其他任何事情,不允许继续。

1VALIDATE PASSWORD PLUGIN can be used to test passwords
2and improve security. It checks the strength of password
3and allows the users to set only those passwords which are
4secure enough. Would you like to setup VALIDATE PASSWORD plugin?
5
6Press y|Y for Yes, any other key for No:

如果您已启用验证,脚本还会要求您选择一个密码验证级别. 请记住,如果您输入 2 – 最强的级别 – 您将收到错误,当您尝试设置任何密码,不包含数字,顶部和底部字母和特殊字符,或基于常见字典单词。

1There are three levels of password validation policy:
2
3LOW Length >= 8
4MEDIUM Length >= 8, numeric, mixed case, and special characters
5STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
6
7Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

接下来,您将被要求提交并确认根密码:

1Please set the password for root here.
2
3New password:
4
5Re-enter new password:

对于其他问题,您应该按Y按下ENTER按钮,在每个提示中删除一些匿名用户和测试数据库,禁用远程根登录,并加载这些新规则,以便MySQL立即尊重我们所做的更改。

请注意,在运行MySQL 5.7(和更高版本)的Ubuntu系统中,MySQL用户设置为使用auth_socket插件默认身份验证,而不是使用密码。

如果使用auth_socket插件访问 MySQL 与您的工作流相匹配,您可以继续步骤 3 但是,如果您在连接到 MySQL 时更喜欢使用密码为 root ,则需要将其身份验证方法从auth_socket更改为mysql_native_password

1sudo mysql

接下来,用以下命令检查您的每个MySQL用户帐户使用的身份验证方法:

1SELECT user,authentication_string,plugin,host FROM mysql.user;
 1[secondary_label Output]
 2+------------------+-------------------------------------------+-----------------------+-----------+
 3| user             | authentication_string                     | plugin                | host      |
 4+------------------+-------------------------------------------+-----------------------+-----------+
 5| root             |                                           | auth_socket           | localhost |
 6| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
 7| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
 8| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
 9+------------------+-------------------------------------------+-----------------------+-----------+
104 rows in set (0.00 sec)

此示例显示, root 用户实际上使用auth_socket插件进行身份验证。 若要配置 ** root** 帐户以使用密码进行身份验证,请运行以下命令ALTER USER

1ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

然后,运行FLUSH PRIVILEGES,告诉服务器重新加载补贴表并实施新更改:

1FLUSH PRIVILEGES;

再次检查每个用户使用的身份验证方法,以确认 root 不再使用auth_socket插件进行身份验证:

1SELECT user,authentication_string,plugin,host FROM mysql.user;
 1[secondary_label Output]
 2+------------------+-------------------------------------------+-----------------------+-----------+
 3| user             | authentication_string                     | plugin                | host      |
 4+------------------+-------------------------------------------+-----------------------+-----------+
 5| root             | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost |
 6| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
 7| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
 8| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
 9+------------------+-------------------------------------------+-----------------------+-----------+
104 rows in set (0.00 sec)

此示例输出显示, root MySQL 用户现在使用密码进行身份验证.一旦您在自己的服务器上确认此情况,您可以退出 MySQL 壳:

1exit

<$>[note] Note :配置您的 ** root** MySQL 用户以使用密码进行身份验证后,您将无法使用以前使用的 sudo mysql 命令访问 MySQL。

1mysql -u root -p

输入您设置的密码后,您将收到MySQL提示。

此时,您的数据库系统已设置,您可以继续安装PHP。

步骤 3 – 安装 PHP 并配置 Nginx 以使用 PHP 处理器

Nginx 现在安装用于服务您的页面,MySQL 安装用于存储和管理您的数据,但是,您仍然没有任何可以生成动态内容的东西。

由于 Nginx 不会像其他一些 Web 服务器那样包含原生 PHP 处理,所以您需要安装php-fpm,即fastCGI 流程管理器

<$>[注] :根据您的云提供商,您可能需要在安装php-fpm包之前添加 Ubuntu 的宇宙存储库,其中包括由 Ubuntu 社区维护的免费和开源软件。

1sudo add-apt-repository universe

美元

安装php-fpm模块以及额外的辅助包php-mysql,这将允许PHP与您的数据库后端进行通信。

1sudo apt install php-fpm php-mysql

即使安装了所有所需的 LEMP 堆栈组件,您仍然需要进行一些配置更改,以便告诉 Nginx 使用 PHP 处理器进行动态内容。

这是在服务器块级别上完成的(服务器块类似于Apache的虚拟主机)。 要做到这一点,请使用您偏好的文本编辑器在 /etc/nginx/sites-available/ 目录中创建一个新的服务器块配置文件。

1sudo nano /etc/nginx/sites-available/your_domain

通过创建新的服务器封锁配置文件,而不是编辑默认配置文件,如果需要,您将能够恢复默认配置。

将以下内容从默认服务器封锁配置文件中提取并稍微修改到新的服务器封锁配置文件中:

 1[label /etc/nginx/sites-available/your_domain]
 2server {
 3        listen 80;
 4        root /var/www/html;
 5        index index.php index.html index.htm index.nginx-debian.html;
 6        server_name your_domain;
 7
 8        location / {
 9                try_files $uri $uri/ =404;
10        }
11
12        location ~ \.php$ {
13                include snippets/fastcgi-php.conf;
14                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
15        }
16
17        location ~ /\.ht {
18                deny all;
19        }
20}

以下是每个指令和位置块所做的:

  • 倾听 ' -- -- 界定Nginx港将听什么。 在这种情况下,它将在 HTTP. *root ' 的默认端口 " 80 " 上收听 - 定义网站所服务文件存储地的文档根. *index' - 配置Nginx,在索引文件可用时优先处理名为 " index.php " 的文件. *server_name' - 定义用于向您的服务器提交特定请求的服务器块。 ** 将此指令指向您的服务器域名或公共IP地址。 *位置 /' - 第一个位置块包括一个try_files'指令,该指令检查与URI请求相匹配的文件是否存在. 如果 Nginx 找不到合适的文件, 它会返回一个 404 个错误 。
  • 位置 ~\.php$' - 这个位置块处理实际的PHP处理,将Nginx指向"快克吉-php.conf"配置文件和"php7.2-fpm.sock"文件,该文件宣布了哪些套接字与"php-fpm"有关. *"位置~/\.ht"——最后一个位置块处理的是".htaccess"文件,而Nginx没有处理. 如果任何.htaccess ' 文件碰巧在文件根中找到它们,则增加`拒绝所有 ' 指令,不会提供给访问者。

添加此内容后,保存并关闭文件. 如果您正在使用nano,您可以通过按CTRL + X然后按YENTER来做到这一点。 通过创建从新服务器块配置文件(在/etc/nginx/sites-available/目录中)到/etc/nginx/sites-enabled/目录的象征链接来启用新服务器封锁:

1sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

然后,从 /sites-enabled/ 目录中卸载默认配置文件:

1sudo unlink /etc/nginx/sites-enabled/default

<$>[注] :如果您需要恢复默认配置,则可以使用下面的命令重建符号链接:

1sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/

美元

测试您的新配置文件以检测语法错误:

1sudo nginx -t

如果报告了任何错误,请返回并重新检查您的文件,然后继续。

当你准备好时,重新加载 Nginx 以进行必要的更改:

1sudo systemctl reload nginx

这结束了LEMP堆栈的安装和配置,但是,确认所有组件可以相互通信是明智的。

步骤 4 – 创建一个PHP文件来测试配置

您可以测试它以验证 Nginx 能正确地将 .php 文件发送到 PHP 处理器。

要做到这一点,请使用您偏好的文本编辑器在文档根中创建一个名为info.php的测试PHP文件:

1sudo nano /var/www/html/info.php

输入下列行到新文件中,这是一个有效的PHP代码,将返回有关您的服务器的信息:

1[label /var/www/html/info.php]
2<?php
3phpinfo();

完成后,保存并关闭文件。

现在,您可以通过访问您的服务器的域名或公共IP地址来访问您的Web浏览器中的此页面,然后是/info.php:

1http://your_server_domain_or_IP/info.php

您的浏览器会加载由PHP生成的如下网页,包含有关您的服务器的信息:

PHP page info

如果您的页面是如下所述的,您已成功设置了 PHP 处理与 Nginx。

在验证 Nginx 是否正确渲染页面后,最好删除您创建的文件,因为它实际上可以给未经授权的用户一些关于您的配置的提示,这可能有助于他们尝试打破。

此时此刻,删除该文件:

1sudo rm /var/www/html/info.php

有了它,你可以在 Ubuntu 18.04 服务器上完全配置和运作的 LEMP 堆栈。

结论

一个LEMP堆栈是一个强大的平台,允许您从您的服务器上设置和服务几乎任何网站或应用程序。

例如,您应该确保连接到您的服务器是安全的。 为此,您可以使用 Let’s Encrypt 保护您的 Nginx 安装(https://andsky.com/tech/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-18-04)。 遵循本指南,您将为您的服务器获得免费的 TLS/SSL 证书,允许它通过 HTTPS 提供内容。

Published At
Categories with 技术
comments powered by Disqus