介绍
在互联网世界中,多种技术结合在一起形成了一种解决方案,使互联网用户能够访问万维网上的动态内容。LEMP 栈就是这些解决方案之一。它融合了四种技术,为高性能和动态网站提供完整的服务器解决方案。LEMP 是 Linux、Nginx、MySQL 和 PHP 的首字母缩写。Linux 是服务器操作系统。 Nginx(发音为 Engine-X,因此缩写中含有字母 E)是 Web 服务器软件。接下来, MySQL 是保存网站和用户数据的数据库系统。PHP 是用于动态处理的服务器端脚本语言。
在本教程中,我们将指导您如何安装和配置 LEMP 栈,并检查一切是否按预期运行。让我们开始吧!
步骤 1:使用 Ubuntu 20.04 配置您的服务器
Ubuntu 20.04 是一款基于 Linux 的操作系统。目前存在几种 基于 Linux 的服务器 操作系统,包括免费和付费的。本指南的重点是 Ubuntu 20.04,它是免费且开源的。这一步解决了 LEMP 栈缩写中的第一个要求,即 L。您应该在您的 VPS 上实际安装了 Ubuntu 20.04 ,以便继续后续步骤。您可以参考我们关于设置 Ubuntu 服务器的指南。或者,如果您想在本地计算机上按照本指南进行操作,可以直接从 Ubuntu 官网下载 Ubuntu 20.04 服务器安装镜像。您应该配置一个具有 sudo 权限的常规非 root 用户,因为我们将运行一些需要 sudo 权限的命令。
步骤 2:安装和配置 Nginx 服务器
Web 服务器使我们能够向网站访问者提供网页等内容。Nginx 是一款流行的 Web 服务器,位列开发者首选的前五大开源 Web 服务器之列。这一步解决了 LEMP 栈中的第二个要求,即代表 Nginx 的 E。Ubuntu 拥有一个默认的软件包仓库,我们将从中获取本指南中使用的软件包。Ubuntu 基于 Debian,它使用 apt 或 dpkg 来管理其软件包。对于来自默认仓库的软件包,我们将使用 apt。
根据经验,在 Linux 系统上开始任何安装之前,您应该运行更新命令。首先在终端中输入以下命令:
|
1 |
sudo apt update |
更新完成后,现在您可以使用以下命令安装 Nginx:
|
1 |
sudo apt install nginx |
安装完成后,Nginx 会自动开始运行。下一步是配置防火墙以允许流量通过。Ubuntu 使用 ufw (Uncomplicated Firewall) 软件包来配置防火墙。安装后,Nginx 会将自己注册为 ufw 的服务。Ubuntu 会在系统启动时自动启动防火墙服务,但为了保险起见,请输入以下命令来启用它:
|
1 |
sudo ufw enable |
要列出 ufw 允许的应用程序配置,请输入以下命令:
|
1 |
sudo ufw app list |
以下是显示上述命令输出的屏幕截图:

如您所见,Nginx 已经注册到 ufw,并且有三个配置文件,说明如下:
- Nginx Full – 它同时打开 80 和 443 端口。80 端口用于普通/未加密的流量,即 HTTP。443 端口用于 TLS/SSL 加密的流量,即 https。
- Nginx HTTP – 它仅打开 80 端口 – 未加密的流量。
- Nginx HTTPS – 它仅打开 443 端口 – TLS/SSL 加密的流量。
虽然 Nginx 会自动向 ufw 注册,但在您亲自操作之前,任何流量都无法访问您的服务器。您可以选择允许所有或任何一个配置文件,但是,最好允许限制最严格的配置文件,同时仍允许您为 Web 服务器配置的流量。由于我们在本教程中尚未配置 SSL,因此我们仅允许 80 端口上的 HTTP 流量。如果您感到好奇,我们有一篇关于如何使用 Certbot 配置来自 Let's Encrypt 的 Nginx 服务器 SSL 的指南。
让我们通过输入以下命令来允许 80 端口的流量:
|
1 |
sudo ufw allow 'Nginx HTTP' |
要验证更改是否成功,请输入以下命令:
|
1 |
sudo ufw status |

运行上述命令的输出表明现在已允许 HTTP 流量。您可以通过在浏览器中访问您的域名或服务器的公网 IP 来检查服务器是否正在运行。如果您尚未配置域名,并且不确定服务器的公网 IP 地址,可以使用以下工具找到它:curl 通过运行以下命令:
|
1 |
curl -4 icanhazip.com |
将上述命令的输出(即您的公网 IP 地址)复制到浏览器的地址栏中。加载页面时,您将看到默认 of Nginx 欢迎页面:

上述页面表明您已成功安装 Nginx。
步骤 3:安装 MySQL 数据库管理系统
数据管理是任何动态网站的关键部分。MySQL 是一个存储和管理网站数据的数据库管理系统。这一步将满足 LEMP 架构中的第三个需求,即 M。输入以下命令来安装 MySQL:
|
1 |
sudo apt install mysql-server |
MySQL 安装完成后,您必须先对其进行配置,然后才能使用。配置的一部分包括确保数据库服务器的安全。MySQL 自带了一个脚本,可以引导您进行安全设置和密码设置。以下命令将启动该脚本:
|
1 |
sudo mysql_secure_installation |

脚本会询问您是否要设置 VALIDATE PASSWORD(验证密码)组件,或者按任意字母继续而不启用该组件。
VALIDATE PASSWORD 组件是一项用于检查您为数据库服务器上的特定用户输入的密码是否符合特定标准的功能。您可以将其配置为检查长度、数字字符、大写或小写字母的可用性等。如果未启用,则您可以配置自己选择的任何密码。但是,如果启用,您必须使用符合您指定标准的密码。启用它可能会导致自动配置 MySQL 用户凭据的软件包(例如 Ubuntu 的 phpMyAdmin 软件包)出现问题。是否启用它是个人的选择。即使不启用,您的数据库仍然是安全的,只需确保使用强且唯一的密码即可。
如果您按 Y 启用了该组件,则脚本将要求您选择密码验证级别:

该脚本提供了 3 个级别的密码验证。LOW(低)级别要求您的密码仅包含 8 个或更多字符。MEDIUM(中)级别要求您的密码包含 8 个或更多字符,且必须是大写字母、小写字母和特殊字符的组合。STRONG(强)级别要求一个包含 8 个或更多字符的复杂密码,该密码必须是大写字母、小写字母、特殊字符和单词的组合,并且不能基于常见的字典单词,否则您将收到错误。让我们选择低级别,输入 0,然后按回车。
脚本会提示您输入并重新输入密码:

输入 y 并按回车键,将您输入的密码接受为 root 密码。随后的提示旨在提高 MySQL 服务器的安全性。首先是删除每个 MySQL 安装自带的默认匿名用户,禁用远程连接的 root 登录,以及删除测试数据库。最后的提示要求您重新加载权限表以使命令生效。对所有提示输入 y 并按回车键:

初始安全配置已完成。
您可以通过运行以下命令来检查您安装的 MySQL 版本:
|
1 |
sudo mysql –V |
以下是我们在本教程中使用的版本:
![]()
对于运行 MySQL 5.7 及更高版本的 Ubuntu 系统,root 用户被配置为使用 auth_socket 插件进行身份验证,而不是使用密码。这确保了更高的安全性,但是,这可能会对外部包(例如 phpMyAdmin 包)产生问题。如果您希望继续使用 auth_socket 插件,请转到步骤 4。
如果您想改用密码进行连接,则必须将身份验证方法配置为使用 mysql_native_password。
通过输入以下命令启动 MySQL 提示符:
|
1 |
sudo mysql |
MySQL 附带了几个默认数据库。您可以通过在终端上输入以下查询来查看默认数据库列表:
|
1 |
show databases; |

名为 mysql 的数据库存储了几个与 MySQL 相关的配置。该数据库有一个名为 users 的表,其中包含用户详细信息以及每个用户的身份验证方法。我们可以使用 SQL 查询 来检索、修改和删除表中的信息。在终端上输入以下查询,以获取每个用户使用哪种身份验证方法的详细信息:
|
1 |
SELECT user, authentication_string, plugin, host FROM mysql.user; |

上面的输出显示 root 用户实际上是使用 auth_socket 插件进行身份验证的。要更改 root 用户的身份验证方法,请在终端中输入以下语句。请记住进行更改以匹配我们在前一步中设置的中等水平的密码强度,否则会导致错误:
|
1 |
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mypassword'; |
查询成功执行后,运行 flush privileges 命令使更改立即生效:
|
1 |
FLUSH PRIVILEGES; |
再次运行下面的 select 语句以检查更改是否已生效:
|
1 |
SELECT user,authentication_string,plugin,host FROM mysql.user; |

从输出中可以看出,root 用户现在将使用 mysql_native_password 进行身份验证。您可以通过输入 exit 并按回车键来退出 mysql 提示符。
您可以尝试通过输入以下命令,使用您设置的密码进行登录:
|
1 |
mysql -u root –p |
提示符将要求您输入密码。如果匹配,您将看到 MySQL 提示符。您已成功使用 MySQL 设置了服务器。接下来,退出 MySQL 提示符。
步骤 4:安装 PHP 并设置 Nginx 以使用 PHP 处理器
PHP 是 PHP: Hypertext Preprocessor(超文本预处理器)的缩写。它是一种广泛使用的开源服务器端脚本语言,用于网站和 Web 应用程序。PHP 满足了 LEMP 架构中的第四个需求。PHP 有助于在网站上生成动态内容。它可以用作网页 and 数据库系统之间的中介。它从数据库中读取数据并将其呈现给您的网站访问者。此外,它还可以从数据库中插入、更新和删除数据。
与其他 Web 服务器不同,Nginx 缺乏原生的 PHP 处理插件,因此您必须安装 php-fpm 以将请求从 Nginx 传递给 PHP 进行处理。首先,添加 Ubuntu universe 软件源,其中包含由 Ubuntu 社区维护的免费开源软件。在终端中输入以下命令:
|
1 |
sudo add-apt-repository universe |
然后,使用以下命令安装 php-fpm 包以及 php-mysql 辅助包,以使 PHP 能够与 MySQL 进行通信:
|
1 |
sudo apt install php-fpm php-mysql |
在撰写本指南时,通过上述命令安装的 PHP 版本为 7.2.24。因此,它会安装 php-fpm7.2 包。在更新服务器块(server block)时请记住这一点,并确保输入正确的版本,否则您的页面将无法加载。
您可以通过输入以下命令来检查 PHP 版本:
|
1 |
php -v |

至此,所有 LEMP 架构组件均已安装完毕。接下来您需要做的是配置 Nginx,将请求引导至 PHP 处理器。在 Nginx 中,配置是在 server 块 中进行的。Server 块相当于 Apache 的虚拟主机。欲了解更多信息,您可以查看我们关于 Nginx server 块的教程。
在本教程中,让我们为 test.com 域名创建一个同名的 server 块,您可以自由选择您喜欢的名称。Server 块位于 /etc/nginx/sites-available/ 目录中。输入以下命令,使用 nano 创建 server 块文件:
|
1 |
sudo nano /etc/nginx/sites-available/test.com |
在文件中输入以下脚本:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
server { listen 80; root /var/www/html; index index.php index.html index.htm index.nginx-debian.html; server_name test.com; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; } location ~ /\.ht { deny all; } } |
以下是每个指令作用的简要说明:
- listen – 定义 Nginx 将监听的端口。端口 80 是默认端口,但是,如果您设置了 SSL,则需要将其设为 443。
- root – 包含存放网站目录的目录。
- index – 指示 Nginx 在收到请求时,如果 index.php 文件可用,则优先提供该文件。
- server_name – 定义 server 块的名称,它保存您服务器的公网 IP 地址或域名。
- location/ – 第一个 location 块包含 try_files 指令。它会检查是否存在与 URI 请求匹配的文件,如果未找到,则返回 404 错误。
- location ~ \.php$ – 此指令通过将 Nginx 请求引导至 fastcgi-php.conf 文件和 php7.2-fpm.sock 文件(定义与 php-fpm 关联的套接字)来处理 PHP。此命令用于检查 php-fpm 的状态,我们指定的版本为 7.2,即我们所拥有的版本。请确保根据您拥有的任何版本进行检查:
|
1 |
sudo service php7.2-fpm status |
- location ~ /\.ht – 此指令处理 .htaccess 文件,这些文件不被 Nginx 处理。deny all 指令确保不会向访问者提供任何 htaccess 文件。
将脚本添加到 test.com 文件后,按 Ctrl + O,然后按 Enter 保存文件。按 Ctrl + X 关闭编辑器。
然后,您必须通过输入以下命令创建指向 /etc/nginx/sites-enabled 的符号链接,以启用该 server 块:
|
1 |
sudo ln -s /etc/nginx/sites-available/test.com /etc/nginx/sites-enabled/ |
然后,通过输入以下命令,从 sites-enabled 中取消关联默认服务器块:
|
1 |
sudo unlink /etc/nginx/sites-enabled/default |
通过输入以下命令测试您的新配置:
|
1 |
sudo nginx -t |
如果语法没有问题,请使用以下命令重新加载 Nginx:
|
1 |
sudo systemctl reload nginx |
至此,您的 LEMP 栈已安装并配置完毕。在下一步中,我们将创建一个测试文件,以确保各个组件能够正常连接。
步骤 5:创建 PHP 文件以测试您的 LEMP 栈
在此步骤中,我们将创建一个 .php file 并在 Nginx 服务器上运行它,以检查其是否正常运行。我们将使用全局 phpinfo() 函数来检查可用的 php 包。输入以下命令在 nano 中打开一个 .php 文件:
|
1 |
sudo nano /var/www/html/test.php |
在 nano 编辑器中,输入以下代码片段:
|
1 |
<?php phpinfo(); |
保存并关闭文件。要在浏览器中访问您刚刚创建的页面,请找到您的域名或 IP 地址,并按如下方式进行导航:
|
1 |
http://your_server_domain_or_IP/test.php |
您应该能够看到 PHP 信息页面:

上述页面表明您已成功设置 Nginx。由于您创建用于测试的文件包含有关服务器的详细信息,因此您应该记得将其删除。输入以下命令删除该文件:
|
1 |
sudo rm /var/www/html/test.php |
如果您以后需要测试配置,可以随时重新创建该文件。
结论
在本教程中,您在 Ubuntu 20.04 上配置了 LEMP 栈,这是目前最强大的 Web 应用程序开发栈之一。从这里开始,您应该能够托管几乎任何网站、Web 应用程序或移动应用程序的服务器端逻辑。为了确保您的网站通过安全的 SSL 连接提供内容,我们有一篇关于在 Nginx 服务器上配置 SSL 证书的教程,建议您阅读。
祝您使用愉快!
评论
暂无评论。发表第一条评论吧。