本教程适用于以下操作系统版本

  • Ubuntu 22.04(Jammy Jellyfish)
  • Ubuntu 20.04(Focal Fossa)
  • Ubuntu 18.04(Bionic Beaver)
  • Ubuntu 16.04(Xenial Xerus)
  • Ubuntu 14.04 LTS(Trusty Tahr)
  • Ubuntu 12.04 LTS(Precise Pangolin)

本页内容

  • 前提条件
  • 安装 Lighttpd Web 服务器
  • 安装 MariaDB 服务器
  • 安装 PHP-FPM 8.1
  • 配置 Lighttpd 与 PHP-FPM
  • 测试 Phpinfo
  • 在 Lighttpd 上配置虚拟主机
  • 在 Lighttpd Web 服务器上启用 HTTPS
  • 结语

LLMP 技术栈(Linux、Lighttpd、MariaDB 与 PHP-FPM)是一套用于部署 Web 应用程序的软件组合。LLMP 技术栈的各个组件均为免费的开源软件,可安装在多种操作系统上。LLMP 技术栈既能托管静态 HTML 网站,也能运行 WordPress、Drupal、Joomla 等 PHP 应用程序。

本教程将向你展示如何在最新的 Ubuntu 22.04 系统上安装并配置 LLMP 技术栈(Linux、Lighttpd、MariaDB 与 PHP-FPM)。教程中还将介绍如何在 Lighttpd Web 服务器上配置虚拟主机,以及如何启用 SSL/HTTPS。

前提条件

在本教程中,我们需要满足以下前提条件:

  • 一台 Ubuntu 22.04 服务器。
  • 一个具有 root/管理员权限的非 root 用户

安装 Lighttpd Web 服务器

Lighttpd(又称 Lighty)是一款高性能 Web 服务器,其诞生正是为了解决 c10k 问题——即“如何在一台服务器上并行处理 10,000 个连接”的概念验证。

Lighttpd 在设计上注重速度、安全性、轻量化和灵活性。它的 CPU 与内存占用极低,并提供了 FastCGI、CGI、认证(Auth)、压缩、URL 重写等高级特性。

在安装任何软件包之前,请先运行以下 apt 命令,更新并刷新 Ubuntu 软件源中的软件包索引。

sudo apt update

现在使用以下命令安装 Lighttpd Web 服务器。

sudo apt install lighttpd

输入 Y 确认安装,并按 ENTER 键继续。随后 Lighttpd 的安装将开始进行。

在 Ubuntu 22.04 上安装 Lighttpd + MariaDB + PHP-FPM

Lighttpd 安装完成后,运行以下命令启动并设置 Lighttpd 服务开机自启。

sudo systemctl start lighttpd
sudo systemctl enable lighttpd

使用以下命令检查并验证 Lighttpd 服务。你应该能看到 Lighttpd 服务处于运行(running)且已启用(enabled)状态,这表示它将在系统启动时自动运行。

sudo systemctl status lighttpd

在 Ubuntu 22.04 上安装 Lighttpd + MariaDB + PHP-FPM

如果你的 Ubuntu 机器上运行着 UFW 防火墙,那么必须为 Lighttpd Web 服务器的入站流量添加防火墙规则。

运行以下 ufw 命令,将 Lighttpd 规则添加到 UFW 防火墙中,随后即可如下检查并验证 UFW 规则列表。

sudo ufw allow "Lighttpd Full"
sudo ufw status

你应该能看到应用配置项“Lighttpd Full”已添加到 UFW 防火墙,这意味着所有入站的 HTTP 和 HTTPS 端口都已被放行。

在 Ubuntu 22.04 上安装 Lighttpd + MariaDB + PHP-FPM

现在使用以下命令查看“/var/www/html”目录。如果你没有看到 index.html 文件,可以使用下面的命令创建一个。

ls -lah /var/www/html
echo "<h1><center>Welcome to Lighttpd Web Server</center></h1>" > /var/www/html/index.html

最后,打开你的网页浏览器并访问服务器 IP 地址(例如 http://192.168.5.28/),你应该能看到 index.html 页面。

在 Ubuntu 22.04 上安装 Lighttpd + MariaDB + PHP-FPM

安装 MariaDB 服务器

安装完 Lighttpd Web 服务器后,接下来便是将 MariaDB 服务器安装到 Ubuntu 系统中。这里还包含如何使用 MariaDB 软件包自带的“mysql_secure_installation”工具来安全地部署 MariaDB 服务器。

运行以下 apt 命令来安装 MariaDB 服务器。在当前的默认 Ubuntu 软件源中,提供的是 MariaDB 10.6 版本。

sudo apt install mariadb-server

现在输入 Y 确认安装并按 ENTER 键,MariaDB 的安装便会开始。

在 Ubuntu 22.04 上安装 Lighttpd + MariaDB + PHP-FPM

MariaDB 安装完成后,运行以下 systemctl 命令启动 MariaDB 服务并设置其开机自启。

sudo systemctl start mariadb
sudo systemctl enable mariadb

使用以下命令检查并验证 MariaDB 服务,你应该能看到 MariaDB 服务正在运行。

sudo systemctl status mariadb

接下来,你将使用“mysql_secure_installation”工具来初始化 MariaDB 部署,该工具可帮助你为 MariaDB 服务器设置 root 密码、禁用 root 远程登录、清理默认数据库以及匿名用户访问等。

现在运行如下的“mysql_secure_installation”命令。

sudo mysql_secure_installation

默认的 MariaDB 安装没有设置 root 密码。直接按 ENTER 键继续。

在 Ubuntu 22.04 上安装 Lighttpd + MariaDB + PHP-FPM

现在输入“n”以保持默认的认证方式(适用于 MariaDB 的 root 用户)。

在 Ubuntu 22.04 上安装 Lighttpd + MariaDB + PHP-FPM

输入 Y 为你的 MariaDB 服务器设置 root 密码。请务必为你的部署使用强密码。

在 Ubuntu 22.04 上安装 Lighttpd + MariaDB + PHP-FPM

现在输入 Y 以禁用 MariaDB root 用户的远程登录。如果你不处于集群环境中,强烈建议禁用 MariaDB root 用户的远程登录。

在 Ubuntu 22.04 上安装 Lighttpd + MariaDB + PHP-FPM

现在再次输入 Y,从你的 MariaDB 安装中移除默认的匿名用户。

在 Ubuntu 22.04 上安装 Lighttpd + MariaDB + PHP-FPM

再次输入 Y,以移除 MariaDB 中匿名用户可访问的默认 test 数据库。

在 Ubuntu 22.04 上安装 Lighttpd + MariaDB + PHP-FPM

最后,再次输入 Y,重新加载 MariaDB 服务器上的所有表权限并应用新的更改。

在 Ubuntu 22.04 上安装 Lighttpd + MariaDB + PHP-FPM

安装 PHP-FPM 8.1

现在你已经安装了 Lighttpd Web 服务器和 MariaDB 数据库服务器。接下来将在你的 Ubuntu 系统上安装 PHP-FPM。当前 Ubuntu 软件源提供的最新 PHP 版本为 8.1。

运行以下 apt 命令,在你的 Ubuntu 系统上安装 PHP-FPM 8.1。

sudo apt install php-fpm php-common php-mysql php-cli php-curl php-xml

输入 Y 确认安装并按 ENTER 键,安装随即开始。

在 Ubuntu 22.04 上安装 Lighttpd + MariaDB + PHP-FPM

PHP-FPM 软件包安装完成后,运行以下命令启动 PHP-FPM 服务并设置其开机自启。

sudo systemctl start php8.1-fpm
sudo systemctl enable php8.1-fpm

使用以下命令检查并验证 PHP-FPM 服务,你应该能看到 PHP-FPM 服务正在运行。

sudo systemctl status php8.1-fpm

在 Ubuntu 22.04 上安装 Lighttpd + MariaDB + PHP-FPM

你也可以使用“ss”命令来检查 PHP-FPM 服务。默认的 PHP-FPM 进程运行在 sock 文件之上,你可以使用以下命令查看 PHP-FPM 进程。

ss -pl | grep php

你应该能看到 PHP-FPM 服务运行在 sock 文件“/run/php/php8.1-fpm.sock”上。

在 Ubuntu 22.04 上安装 Lighttpd + MariaDB + PHP-FPM

配置 Lighttpd 与 PHP-FPM

LLMP 技术栈各软件包的安装已经完成,但你仍需对 Lighttpd Web 服务器进行配置,使其能够与 PHP-FPM 服务协同工作。这可以通过在 Lighttpd Web 服务器上启用 FastCGI 模块来实现。

首先,使用 nano 编辑器打开 PHP-FPM 的配置文件“/etc/php/8.1/fpm/php.ini”。

sudo nano /etc/php/8.1/fpm/php.ini

在文件中添加以下配置。

cgi.fix_pathinfo = 1

完成后保存并关闭文件。

现在使用以下命令重启 PHP-FPM 服务,使新的更改生效。

sudo systemctl restart php8.1-fpm

接下来,运行以下命令以启用 Lighttpd 的“fastcgi”与“fastcgi-php-fpm”模块。

sudo lighty-enable-mod fastcgi fastcgi-php-fpm

使用 nano 编辑器打开配置文件“/etc/lighttpd/conf-available/15-fastcgi-php-fpm.conf”。该文件是 fastcgi-php-fpm 模块的配置,用于与 PHP-FPM 的 sock 文件进行通信。

sudo nano /etc/lighttpd/conf-available/15-fastcgi-php-fpm.conf

将 socket 选项的路径修改为“/run/php/php8.1-fpm.sock”,如下所示。

## Use PHP-FPM service for PHP via FastCGI
fastcgi.server += ( ".php" =>
        ((
                "socket" => "/run/php/php8.1-fpm.sock",
                "broken-scriptfilename" => "enable"
        ))
)

完成后保存并关闭文件。

最后,运行以下命令重启 Lighttpd 服务并应用新的更改。至此,你的 LLMP 技术栈已经可以同时托管静态 HTML 页面和动态 PHP Web 应用了。

sudo systemctl restart lighttpd

在 Ubuntu 22.04 上安装 Lighttpd + MariaDB + PHP-FPM

测试 Phpinfo

要验证你的 LLMP 技术栈安装是否成功,你可以简单地创建一个 PHPINFO 脚本,它会显示 Lighttpd 与 PHP-FPM 的详细配置信息。

运行以下命令,创建一个新的 PHP 脚本“/var/www/html/info.php”,并将其所有权更改为“www-data”用户。

echo "<?php phpinfo(); ?>" > /var/www/html/info.php
sudo chown -R www-data:www-data /var/www/html

回到你的网页浏览器,访问 Ubuntu 服务器 IP 地址加上 URL 路径“/info.php”(即 http://192.168.5.28/info.php)。你应该能在下图中看到详细的 phpinfo 页面,这表明 Lighttpd 与 PHP-FPM 的配置已成功完成。

在 Ubuntu 22.04 上安装 Lighttpd + MariaDB + PHP-FPM

在 Lighttpd 上配置虚拟主机

至此,你已经完成了 LLMP 技术栈的安装与配置,它也已能够通过 PHP-FPM 来托管动态 PHP Web 应用。接下来你将学习如何在 Lighttpd Web 服务器上配置虚拟主机。虚拟主机允许你在单台服务器或单个 IP 地址上运行多个域名。

现在运行以下命令,创建一个新目录“/etc/lighttpd/vhosts”。该目录将用于存储 Lighttpd Web 服务器的所有虚拟主机配置。

sudo mkdir -p /etc/lighttpd/vhosts/

现在使用 nano 编辑器打开 Lighttpd 的配置文件“/etc/lighttpd/lighttpd.conf”。

sudo nano /etc/lighttpd/lighttpd.conf

在文件中添加以下配置。

include "/etc/lighttpd/vhosts/*.conf"

完成后保存并关闭文件。现在你就可以开始配置 Lighttpd 虚拟主机了。

首先,为你的虚拟主机创建文档根目录(Document Root)。在本示例中,文档根目录为“/var/www/hwdomain”。

mkdir -p /var/www/hwdomain/

在文档根目录“/var/www/hwdomain”下创建一个新的“index.html”文件,并将其所有权更改为正确的用户“www-data”。

echo "<h1><center>Welcome to howtoforge.local virtual host</center></h1>" > /var/www/hwdomain/index.html
sudo chown -R www-data:www-data /var/www/hwdomain

接下来,使用 nano 编辑器创建一个新的虚拟主机配置文件“/etc/lighttpd/vhosts/hwdomain.conf”。

sudo nano /etc/lighttpd/vhosts/hwdomain.conf

在文件中添加以下配置。在本示例中,虚拟主机将使用域名“howtoforge.local”。

$HTTP["host"] =~ "(^|.)howtoforge.local$" {
    server.document-root = "/var/www/hwdomain"
    server.errorlog = "/var/log/lighttpd/howtoforge.local-error.log"
    accesslog.filename = "/var/log/lighttpd/howtoforge.local-access.log"
}

完成后保存并关闭文件。

之后,运行以下命令检查并验证 Lighttpd 配置。如果 Lighttpd 配置正确,你将看到类似“Syntax OK”的输出信息。

sudo lighttpd -t -f /etc/lighttpd/lighttpd.conf

现在使用以下命令重启 Lighttpd 服务,使新的虚拟主机配置生效。

sudo systemctl restart lighttpd

在 Ubuntu 22.04 上安装 Lighttpd + MariaDB + PHP-FPM

回到你的网页浏览器,在地址栏中输入你的域名(例如 http://howtoforge.local/)。你应该能看到该虚拟主机默认的 index.html 页面。

在 Ubuntu 22.04 上安装 Lighttpd + MariaDB + PHP-FPM

在 Lighttpd Web 服务器上启用 HTTPS

配置好 Lighttpd 虚拟主机后,现在你将学习如何在 Lighttpd Web 服务器上启用 SSL/HTTPS。

在开始配置 SSL 之前,请先运行以下命令为 Lighttpd Web 服务器启用“ssl”模块。这会在“/etc/lighttpd/conf-enabled/10-ssl.conf”处创建链接文件,其中包含 Lighttpd 的基础 SSL 配置。此外,你还需要生成本地主机(localhost)的 SSL 证书,其文件名为“server.pem”。

sudo lighty-enable mod ssl

现在运行以下命令,创建并生成本地主机(localhost)名为“server.pem”的 SSL 证书。

openssl req -new -newkey rsa:2048 -nodes -keyout server.com.key -out server.com.csr
openssl x509 -req -days 365 -in server.com.csr -signkey server.com.key -out server.com.crt
cat server.com.key server.com.crt > server.pem

现在你已经可以在虚拟主机配置文件“hwdomain.conf”中启用 SSL/HTTPS 了。

在为虚拟主机配置 SSL 之前,请确保你已经为你的域名生成了 SSL 证书。在本示例中,域名为“howtoforge.local”,其 SSL 证书位于“/etc/letsencrypt/live/howtoforge.local”目录中。

使用 nano 编辑器打开虚拟主机配置文件“/etc/lighttpd/vhosts/hwdomain.conf”。

sudo nano /etc/lighttpd/vhosts/hwdomain.conf

将你刚刚创建的配置替换为以下配置。

$HTTP["scheme"] == "http" {
        $HTTP["host"] == "howtoforge.local" {
                url.redirect = ("/.*" => "https://howtoforge.local$0")
        }
}
$SERVER["socket"] == ":443" {
    ssl.engine = "enable"
    ssl.pemfile = "/etc/letsencrypt/live/howtoforge.local/fullchain.pem"
    ssl.privkey = "/etc/letsencrypt/live/howtoforge.local/privkey.pem"
    server.name = "howtoforge.local"
    server.document-root = "/var/www/hwdomain"
    server.errorlog = "/var/log/lighttpd/howtoforge.local-error.log"
    accesslog.filename = "/var/log/lighttpd/howtoforge.local-access.log"
}

完成后保存并关闭文件。

接下来,运行以下命令检查并验证 Lighttpd Web 服务器的配置,确保你看到了类似“Syntax OK”的输出信息。随后,重启 Lighttpd 服务使新的更改生效。

sudo lighttpd -t -f /etc/lighttpd/lighttpd.conf
sudo systemctl restart lighttpd

最后,回到你的网页浏览器,在 URL 前面加上 https 访问该虚拟主机域名(例如 https://howtoforge.local)。如果你的 SSL 配置成功,你将能在 URL 处看到本地图标,如下图所示。

在 Ubuntu 22.04 上安装 Lighttpd + MariaDB + PHP-FPM

结语

恭喜!你已成功在 Ubuntu 22.04 服务器上安装了 LLMP 技术栈(Linux、Lighttpd、MariaDB 与 PHP-FPM)。你还学习了如何在 Lighttpd Web 服务器上配置虚拟主机,并为你的域名在 Lighttpd 上启用了 SSL/HTTPS。