本教程适用于以下操作系统版本
- Ubuntu 24.04(Noble Numbat)
- Ubuntu 22.04(Jammy Jellyfish)
- Ubuntu 20.04(Focal Fossa)
- Ubuntu 20.04(Focal Fossa)
- Ubuntu 18.04(Bionic Beaver)
- Ubuntu 16.04(Xenial Xerus)
本页内容
- 先决条件
- 安装 Nginx 网页服务器
- 安装 MariaDB 服务器
- 安装 PHP-FPM
- 将 Nginx 与 PHP-FPM 集成
- 创建 Nginx 服务器块(虚拟主机)
- 测试你的服务器块配置
- 结论
LEMP 堆栈(Linux、Nginx、MySQL/MariaDB 和 PHP)是一组用于托管和开发 PHP Web 应用程序的免费开源软件。LEMP 堆栈可用于部署静态和动态 Web 应用程序。
本指南将向你展示如何在 Ubuntu 24.04 "Noble Numbat" 上安装 LEMP 堆栈(Linux、Nginx、MySQL/MariaDB 和 PHP)。我们还将演示如何加固 MariaDB 服务器,并创建 Nginx 服务器块配置来托管网站或域名。
先决条件
在开始之前,请确保你拥有一台安装了 Ubuntu 24.04 "Noble Numbat" 的机器,并使用具有 root 权限或具备 sudo/管理员权限的非 root 用户。同时,请确保 UFW(Uncomplicated Firewall,简易防火墙)已运行并启用。
安装 Nginx 网页服务器
Nginx(又称 engine-x)是互联网上最流行的网页服务器。它之所以流行,是因为 Nginx 能够以最少的系统资源同时处理高并发流量。在第一步中,你将把 Nginx 网页服务器安装到 Ubuntu 服务器上。
在安装软件包之前,请使用以下命令更新并刷新你的 Ubuntu 软件包列表。
sudo apt update

使用以下命令将 Nginx 网页服务器安装到你的 Ubuntu 机器上。当系统提示时,输入 Y 确认安装。
sudo apt install nginx

安装完成后,Nginx 服务应该已经在你的系统上运行并设置为开机自启。使用以下命令验证 Nginx 服务。
sudo systemctl is-enabled nginx
sudo systemctl status nginx
你应该会看到 Nginx 服务的状态为 'enabled'(已启用),当前状态为 'active (running)'(运行中)。

在访问 Nginx 之前,你需要通过 UFW(Uncomplicated Firewall,简易防火墙)在 Ubuntu 服务器上开放 HTTP 和 HTTPS 端口。
执行以下 'ufw' 命令以启用 'Nginx Full'(完整 Nginx)配置项,该配置将允许对 Ubuntu 服务器的 HTTP 和 HTTPS 访问。
sudo ufw allow 'Nginx Full'
现在使用以下命令验证 UFW 规则。请确保 'Nginx Full' 配置项已启用,状态为 'ALLOW'(允许)。
sudo ufw status

最后,从你常用的网页浏览器访问 http://192.168.5.30/ 以打开你的 Nginx 安装页面。如果成功,你应该会看到如下默认的 'index.html' 页面:

安装 MariaDB 服务器
安装完 Nginx 后,你将在 Ubuntu 上安装 MariaDB 服务器。在本示例中,你将通过 Ubuntu 软件仓库安装 MariaDB,然后使用 'mariadb-secure-installation' 工具加固 MariaDB 安装。
要在 Ubuntu 上安装 MariaDB 服务器,请执行以下 'apt install' 命令。输入 Y 并按 ENTER 键继续。
sudo apt install mariadb-server

安装完成后,使用以下命令验证 MariaDB 服务。这将显示 MariaDB 服务的状态。
sudo systemctl is-enabled mariadb
sudo systemctl status mariadb
MariaDB 服务处于 'enabled'(已启用)状态,当前状态为 'active (running)'(运行中)。

安装 MariaDB 服务器后,你必须通过 'mariadb-secure-installation' 进行加固。这可以让你设置 MariaDB 的 root 密码、禁用 root 用户的远程认证,并从 MariaDB 服务器安装中删除不必要的数据库和权限。
运行以下 'mariadb-secure-installation' 命令来加固 MariaDB 服务器。
sudo mariadb-secure-installation
当提示输入 MariaDB root 密码时,按 ENTER 键。
当提示输入 MariaDB root 密码时,按 ENTER。
Enter current password for root (enter for none): OK, successfully used password, moving on...
当询问是否切换到 unix_socket 认证时,输入 'n'。
Switch to unix_socket authentication [Y/n] n ... skipping.
输入 Y 以配置 MariaDB root 密码。然后,输入你的新密码并重复确认。
Change the root password? [Y/n] Y New password: Re-enter new password: Password updated successfully! Reloading privilege tables.. ... Success!
输入 Y 以从 MariaDB 服务器安装中删除默认的匿名用户。
Remove anonymous users? [Y/n] Y ... Success!
输入 Y 以禁用 MariaDB root 用户的远程登录。root 用户应始终从 localhost 连接。
Disallow root login remotely? [Y/n] Y ... Success!
现在再次输入 Y,以从 MariaDB 服务器中删除默认的 test 数据库及其权限。
Remove test database and access to it? [Y/n] Y - Dropping test database... ... Success! - Removing privileges on test database... ... Success!
输入 Y 以重新加载权限表并应用你到目前为止所做的所有更改。
Reload privilege tables now? [Y/n] Y ... Success!
完成后,你将看到如下提示信息:
All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!
PHP-FPM(FastCGI Process Manager,FastCGI 进程管理器)是 PHP 的 FastCGI 实现的一种替代方案。它主要用于以 Nginx 作为网页服务器的高流量站点。在本节中,你将安装 PHP-FPM 以及若干附加扩展,例如用于 MySQL/MariaDB 驱动的 mysqli、opcache,以及用于缓存的 APCu。
使用以下命令将 PHP-FPM 安装到你的 Ubuntu 服务器上。当系统提示时,输入 Y 并按 ENTER 键继续。
使用以下命令在 Ubuntu 服务器上安装 PHP-FPM。出现提示时,输入 Y 并按 ENTER 继续。
sudo apt install php-fpm php-mysql php-curl php-gd php-json php-intl php-bcmath php-opcache php-apcu php-mbstring php-fileinfo php-xml php-soap php-tokenizer php-zip

安装完成后,PHP-FPM 服务应当已启动并运行。使用以下命令检查 PHP-FPM 的服务状态。
sudo systemctl is-enabled php8.3-fpm
sudo systemctl status php8.3-fpm
如下所示,PHP-FPM 的状态为 'active (running)'(运行中),并在系统启动时 'enabled'(已启用):

使用以下命令查看 PHP-FPM sock 文件的所在路径。
使用以下命令检查 PHP-FPM sock 文件所在的路径。
ss -pl | grep php
在以下输出中,你可以看到 PHP-FPM 的 sock 文件位于 '/run/php/php8.3-fpm.sock'。

既然你已经安装了 PHP-FPM,现在是将它与 Nginx 网页服务器集成的时候了。为此,你必须确切知道 PHP-FPM sock 文件的路径,然后修改默认的 Nginx 服务器块文件。
使用以下 nano 编辑器命令打开服务器块配置文件 '/etc/nginx/sites-available/default'。
使用以下 nano 编辑器命令打开服务器块配置文件 '/etc/nginx/sites-available/default'。
sudo nano /etc/nginx/sites-available/default
取消以下行的注释,并确保将 PHP-FPM sock 文件的路径改为新的位置。
# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# # With php-fpm (or other unix sockets):
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
}
现在运行以下 'nginx' 命令来验证你的 Nginx 配置语法。在对 Nginx 配置做出修改后,你都必须运行此命令。
现在运行以下 'nginx' 命令来验证你的 Nginx 语法。在修改 Nginx 配置后,你必须运行此命令。
sudo nginx -t
如果你的 Nginx 语法正确,你应该会看到类似如下的确认信息:

接下来,运行以下命令重启 Nginx 服务,使 Nginx 与 PHP-FPM 的集成生效。
sudo systemctl restart nginx
在 Nginx 重启后,你可以通过 PHPINFO 文件验证集成是否成功。运行以下命令,在默认 web 根目录 '/var/www/html/' 下创建 PHPINFO 文件 'info.php'。
echo "<?php phpinfo(); ?>" > /var/www/html/info.php
你可以在下方看到,在 Nginx 网页服务器下,PHP 8.3 正以 PHP-FPM 作为服务器 API 运行。
如下所示,PHP 8.3 正在 Nginx Web 服务器下以 PHP-FPM 作为服务器 API 运行。

向下滚动页面,你还会看到 PHP 的 mysqli/mysqlnd 扩展也已安装。

最后,你还会看到 PHP 安装中已启用通过 APC 的缓存。

服务器块(server block)是 Nginx 网页服务器中“虚拟主机”(virtual host)的另一种叫法。它用于在单台服务器上托管多个网站或域名。在本节中,你将学习如何创建一个 Nginx 服务器块。
在创建服务器块配置之前,运行以下命令创建一个新的网站根目录 '/var/www/newsite/public_html' 以及一个自定义的 'index.html' 页面。
在创建服务器块配置之前,运行以下命令创建一个新的 web 根目录 '/var/www/newsite/public_html' 以及自定义的 'index.html' 页面。
mkdir -p /var/www/newsite/public_html
echo "Welcome to newsite.com" > /var/www/newsite/public_html/index.html
现在运行以下命令,将 '/var/www/newsite' 目录的所有权更改为用户 'www-data'。在 Ubuntu 系统中,Nginx Web 服务器以 'www-data' 用户身份运行。
sudo chown -R www-data:www-data /var/www/newsite
接下来,运行以下 nano 编辑器命令,创建新的服务器块配置文件 '/etc/nginx/sites-available/newsite'。
sudo nano /etc/nginx/sites-available/newsite
插入以下配置,确保将 server_name 选项改为你的域名,并将 web 根目录改为新路径,例如 '/var/www/newsite/public_html'。
server {
listen 80;
server_name newsite.com;
root /var/www/newsite/public_html;
index index.html;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location / {
try_files $uri $uri/ =404;
}
}
现在运行以下命令来启用名为 'newsite' 的服务器块配置。通过该命令,你将在 '/etc/nginx/sites-enabled/' 目录中创建 '/etc/nginx/sites-available/newsite' 文件的新符号链接。
现在运行以下命令以启用服务器块配置 'newsite'。该命令会在 '/etc/nginx/sites-enabled/' 目录下创建 '/etc/nginx/sites-available/newsite' 文件的符号链接。
sudo ln -s /etc/nginx/sites-available/newsite /etc/nginx/sites-enabled/
在服务器块启用后,运行以下 'nginx' 命令检查你的 Nginx 语法。
sudo nginx -t
最后,运行以下命令重启 Nginx 网页服务器,以应用你新的服务器块配置。完成后,你的服务器块配置应该可以从本地机器访问了。
最后,运行以下命令重启 Nginx Web 服务器并应用你新的服务器块配置。至此,你的服务器块配置应当可以从本地机器访问。
sudo systemctl restart nginx

为了确保你的 Nginx 服务器块配置成功,你需要从本地计算机访问该服务器块配置对应的域名。如果你使用的是公网域名,直接访问该域名即可。但对于本地域名用户,需要编辑本地计算机上的 'hosts' 文件。
["对于 Linux 和 MacOS 用户,以 root/管理员权限编辑 '/etc/hosts' 文件。", "对于 Windows 用户,以管理员身份编辑 'C:\\Windows\\System32\\drivers\\etc\\hosts' 文件。"]
- For Linux and MacOS users, edit the ' /etc/hosts ' file as root/administrative privileges.
- For Windows users, edit the file ' C:\Windows\System32\drivers\etc\hosts ' as administrator.
按如下方式添加你的服务器 IP 地址和域名:
192.168.5.30 newsite.com
现在打开你的网页浏览器并访问 http://newsite.com/。如果你的 Nginx 服务器块配置成功,你应该会看到你创建的自定义 'index.html' 页面,如下所示:
现在打开你的 Web 浏览器并访问 http://newsite.com/。如果你的 Nginx 服务器块配置成功,你应该会看到你所创建的自定义 'index.html' 页面,如下所示:

恭喜!你现已在 Ubuntu 24.04 "Noble Numbat" 上安装了 LEMP 堆栈(Linux、Nginx、MySQL/MariaDB 和 PHP)。你还加固了 MariaDB 服务器的安装,并创建了一个 Nginx 服务器块来托管多个网站。
恭喜!你现已在 Ubuntu 24.04 "Noble Numbat" 上安装了 LEMP 堆栈(Linux、Nginx、MySQL/MariaDB 和 PHP)。你还加固了 MariaDB 服务器安装,并创建了 Nginx 服务器块来托管多个网站。