Debian 上使用 Nginx 搭建 WordPress 博客(MariaDB、PHP、Certbot 免费 SSL)

本文将详细介绍在 Debian 系统上使用 Nginx 搭建 WordPress 博客的完整流程。所用软件包括 Nginx(Web 服务器)、MariaDB(数据库服务器)、PHP-FPM(PHP 处理服务)和 WordPress。全程启用 HTTPS,并通过 Let’s Encrypt 的 Certbot 获取免费 SSL 证书。每一步都给出具体命令及其作用解释,适合初学者按部就班操作。

第 1 步:更新系统并安装 Nginx

首先更新软件包索引并安装 Nginx。Nginx 是一款高性能、轻量级的 Web 服务器,可通过 APT 直接获取:

sudo apt update
sudo apt install nginx -y
  • sudo apt update:更新软件包列表,确保安装最新软件
  • sudo apt install nginx -y:从 Debian 仓库安装 Nginx Web 服务器​完成后,Nginx 的默认网页根目录为 /var/www/html/

安装完成后,启动 Nginx 并设置为开机自启:

sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx
  • sudo systemctl start nginx:启动 Nginx 服务。
  • sudo systemctl enable nginx:设置 Nginx 开机自动启动。
  • sudo systemctl status nginx:查看 Nginx 服务运行状态。确认显示 “active (running)” 表示成功启动。

第 2 步:安装并安全配置 MariaDB

WordPress 需要数据库来存储数据。MariaDB 是 MySQL 的开源分支,也是 Debian 默认提供的数据库软件。使用 APT 安装 MariaDB:

sudo apt install mariadb-server -y
  • sudo apt install mariadb-server -y:安装 MariaDB 数据库服务器。

安装完成后,启动并设置开机自启:

sudo systemctl start mariadb
sudo systemctl enable mariadb
sudo systemctl status mariadb
  • sudo systemctl start mariadb:启动 MariaDB 服务。
  • sudo systemctl enable mariadb:设置 MariaDB 开机自动启动。
  • sudo systemctl status mariadb:检查 MariaDB 服务状态。正常运行会显示 “active (running)”。

接下来运行安全脚本 mysql_secure_installation 提高安全性:

sudo mysql_secure_installation

该脚本会提示设置 MariaDB 根用户密码、删除匿名用户、禁止远程 root 登录、删除测试数据库等选项。按提示操作(一般回车或输入 Y 确认),完成后 MariaDB 安装更加安全

第 3 步:创建 WordPress 数据库和用户

登录 MariaDB 创建专用数据库和用户。推荐使用强密码,并对数据库只赋予必要权限。首先以 root 权限进入数据库(根据安装方式,可能直接 sudo mariadbsudo mysql -u root -p):

sudo mysql -u root -p
系统提示输入刚刚设置的 MariaDB root 密码。登录后执行以下 SQL 命令(建议使用 utf8mb4 字符集以支持表情等字符):
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT ALL ON wordpress.* TO 'wpuser'@'localhost' IDENTIFIED BY 'StrongPass1!';
FLUSH PRIVILEGES;
EXIT;
  • CREATE DATABASE wordpress ...:创建名为 wordpress 的数据库,用于存放博客数据​。
  • GRANT ALL ON wordpress.* TO 'wpuser'@'localhost' IDENTIFIED BY 'StrongPass1!';:创建用户 wpuser 并授予其对 wordpress 数据库的所有权限。其中 StrongPass1! 是示例密码,请替换为复杂密码。
  • FLUSH PRIVILEGES;:刷新权限,让刚才的改动立即生效。
  • EXIT;:退出 MariaDB 命令行。

第 4 步:安装 PHP 和常用扩展

WordPress 需要 PHP 环境,且要通过 PHP-FPM 与 Nginx 通信。安装 PHP 及常用扩展:

sudo apt install php php-fpm php-mysql php-curl php-gd php-intl php-mbstring php-soap php-xml php-xmlrpc php-zip -y
  • php:PHP 主程序,php-fpm:PHP FastCGI 进程管理器,用于与 Nginx 配合。
  • php-mysql:PHP 与 MariaDB/MySQL 通信的扩展。
  • 其他扩展(如 php-curl, php-gd, php-mbstring 等)为 WordPress 插件和功能提供支持。安装这些扩展能让网站运行更稳定。

安装完成后,启动并启用 PHP-FPM 服务(具体服务名根据 PHP 版本可能为 php7.4-fpmphp8.1-fpm 等):

sudo systemctl start php7.4-fpm
sudo systemctl enable php7.4-fpm
sudo systemctl status php7.4-fpm
  • 替换上例中的版本号为你系统实际安装的版本。
  • sudo systemctl start 启动 PHP-FPM,enable 设置开机自启,并通过 status 检查其状态。

第 5 步:下载并部署 WordPress 文件

创建网站目录并将最新版 WordPress 文件复制到该目录。以例子域名 mysite.com 为例,执行:

sudo mkdir -p /var/www/html/mysite.com
  • sudo mkdir -p /var/www/html/mysite.com:在 /var/www/html 下创建网站根目录,-p 参数可递归创建父目录​。此目录用于存放 WordPress 文件。

接着下载 WordPress 安装包并解压:

cd /tmp
wget https://wordpress.org/latest.tar.gz
tar xzvf latest.tar.gz
  • cd /tmp:切换到临时目录。
  • wget ...latest.tar.gz:从 WordPress 官方网站下载最新压缩包。
  • tar xzvf latest.tar.gz:解压下载的归档,解压后会生成 /tmp/wordpress 目录。

将解压后的文件复制到网站根目录:

sudo cp -a wordpress/. /var/www/html/mysite.com
  • sudo cp -a wordpress/. /var/www/html/mysite.com:递归复制 /tmp/wordpress 目录下的所有文件和隐藏文件到网站根目录。这里使用 -a 保持文件属性不变。

此时 /var/www/html/mysite.com 下已有 WordPress 的所有源文件(含示例配置文件 wp-config-sample.php 等)。

第 6 步:配置 wp-config.php

进入网站目录,复制并修改 WordPress 配置文件以连接数据库:

cd /var/www/html/mysite.com
sudo cp wp-config-sample.php wp-config.php
sudo nano wp-config.php
  • sudo cp wp-config-sample.php wp-config.php:复制示例配置文件为 wp-config.php
  • sudo nano wp-config.php:使用编辑器打开 wp-config.php

在打开的文件中,找到数据库连接部分,修改为刚创建的数据库信息,例如:

define('DB_NAME', 'wordpress');
define('DB_USER', 'wpuser');
define('DB_PASSWORD', 'StrongPass1!');
define('DB_HOST', 'localhost');
  • DB_NAME 设置为第 3 步创建的数据库名(此处为 wordpress)。
  • DB_USERDB_PASSWORD 分别填写对应的数据库用户名和密码(这里是 wpuser 及其密码)。
  • DB_HOST 通常保持 localhost(表示数据库服务器在本机)。

保存后退出编辑器(在 nano 中按 Ctrl+O 保存,Ctrl+X 退出)。

第 7 步:设置文件权限和所有权

为了让 Nginx(运行于 www-data 用户)能正常读取和写入 WordPress 文件,需要正确设置目录权限。执行:

sudo chown -R www-data:www-data /var/www/html/mysite.com
  • sudo chown -R www-data:www-data /var/www/html/mysite.com:将网站目录及其下所有文件的拥有者改为 www-data 用户和组。Nginx 默认以 www-data 身份运行,这样它可以访问和写入必要文件。

然后设置安全的文件和目录权限:

sudo find /var/www/html/mysite.com -type d -exec chmod 755 {} \;
sudo find /var/www/html/mysite.com -type f -exec chmod 644 {} \;
  • 以上命令将所有目录权限设置为 755(所有者可读写执行,组和其它用户可读执行),所有文件权限设置为 644(所有者可读写,组和其它只读)。这是一种常用的安全权限配置。

这样 WordPress 文件均可被 Nginx 读取(以及在需要时写入,如插件安装时),同时避免权限过宽导致安全风险。

第 8 步:配置 Nginx 虚拟主机(Server Block)

现在在 Nginx 中为 WordPress 网站创建服务器块配置文件,以响应 HTTP 请求。新建配置文件(假设使用 mysite.com 作为域名):

sudo nano /etc/nginx/sites-available/mysite.com

在其中填入以下内容,并根据实际修改域名和路径:

server {
    listen 80;
    listen [::]:80;
    server_name mysite.com www.mysite.com;

    root /var/www/html/mysite.com;
    index index.php index.html index.htm;

    access_log /var/log/nginx/mysite.com.access.log;
    error_log  /var/log/nginx/mysite.com.error.log;

    client_max_body_size 100M;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}
  • listen 80;listen [::]:80;:指定服务器监听 IPv4/IPv6 的 80 端口(HTTP 默认端口)。
  • server_name mysite.com www.mysite.com;:指定该配置块响应的域名(可列出多个)。
  • root /var/www/html/mysite.com;:网站根目录,即 WordPress 文件所在路径。
  • index index.php index.html index.htm;:默认主页文件列表,index.php 在 WordPress 中用于处理请求。
  • access_log/error_log:指定访问日志和错误日志路径,便于排错。
  • client_max_body_size 100M;:允许客户端上传最大 100MB 数据,可根据需要调整(用于插件上传、媒体上传时)。
  • location / { try_files $uri $uri/ /index.php?$args; }:指示 Nginx 按顺序尝试访问请求的静态文件或目录,若未找到则将请求转给 index.php 处理。此配置保证 WordPress 的伪静态和固定链接功能正常工作。
  • location ~ \.php$ { ... }:匹配所有以 .php 结尾的请求。在此块中:
    • include fastcgi_params;:加载默认的 FastCGI 参数。
    • fastcgi_pass unix:/run/php/php7.4-fpm.sock;:指定 PHP-FPM 监听的 Unix 套接字(以安装的 PHP 版本为准)。
    • fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;:设置脚本文件路径,告诉 PHP-FPM 要执行哪个 PHP 文件。

在编辑完成后,保存并退出(在 nano 中 Ctrl+O、Ctrl+X)。然后启用该站点并禁用默认站点:

sudo ln -s /etc/nginx/sites-available/mysite.com /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
sudo rm /etc/nginx/sites-available/default
  • ln -s:建立启用配置的软链接。
  • 删除 /etc/nginx/sites-enabled/default/etc/nginx/sites-available/default:移除默认配置,防止默认站点拦截请求。

最后检查配置语法并重启 Nginx:

sudo nginx -t
sudo systemctl reload nginx
  • sudo nginx -t:测试 Nginx 配置文件是否有语法错误。
  • sudo systemctl reload nginx:平滑重启 Nginx,使新配置生效。

下面表格列出上述 Nginx 配置文件中常用指令及其含义,帮助理解各项作用:

指令 / 设置说明
listen 80; / listen [::]:80;配置 Nginx 监听 IPv4/IPv6 的 80 端口(HTTP 默认端口)。
server_name mysite.com www.mysite.com;指定该 server 块响应的域名,可同时列出多个(示例包含带 www 和不带 www)。
root /var/www/html/mysite.com;网站根目录路径,即存放 WordPress 文件的位置​。
index index.php index.html index.htm;默认首页文件列表。Nginx 会按顺序查找这些文件作为首页显示。
access_log /var/log/nginx/...;指定访问日志文件存放路径,用于记录所有访问请求。
error_log /var/log/nginx/...;指定错误日志文件存放路径,用于记录 Nginx 错误信息。
client_max_body_size 100M;允许客户端提交的最大请求体大小(此处为 100MB),主要用于控制文件上传大小。
location / { try_files $uri $uri/ /index.php?$args; }根路径请求的匹配规则:尝试按文件系统查找请求的文件或目录,若不存在则将请求转发给 index.php 处理。确保 WordPress 伪静态功能正常。
location ~ \.php$ { ... }匹配以 .php 结尾的请求。在此区块中,通过 fastcgi_pass 将 PHP 请求转发给 PHP-FPM 进程​。
fastcgi_pass unix:/run/php/php7.4-fpm.sock;指定 PHP-FPM 的监听套接字或端口,确保 Nginx 能将 PHP 请求发送给正确的 PHP 进程(根据实际版本调整)。
fastcgi_param SCRIPT_FILENAME ...;设置服务器端 PHP 脚本的路径变量,让 PHP-FPM 知道要执行哪个文件。

第 9 步:检查服务器防火墙和端口是否开放

UFW(Ubuntu 防火墙):
查看状态:sudo ufw status。如果状态为 inactive,说明 UFW 未启用;如果是 active,则需要确认是否允许 80 和 443 端口:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw status

如上命令将开放 HTTP (80) 和 HTTPS (443) 端口。状态中应该显示 80/tcp ALLOW443/tcp ALLOW

第 10步:启用 HTTPS(Certbot 证书)

为网站配置免费 SSL 证书并启用 HTTPS。使用 Certbot 的 Nginx 插件可以自动完成证书申请和配置:

sudo apt update
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d mysite.com -d www.mysite.com
  • sudo apt install certbot python3-certbot-nginx -y:安装 Certbot 及其 Nginx 插件。1
  • sudo certbot --nginx -d mysite.com -d www.mysite.com:启动 Certbot,使用 --nginx 插件自动获取并配置证书,同时为两个域名生成证书。命令中的 -d 参数后跟域名,多域名用多个 -d

运行后,Certbot 会提示输入邮箱、同意服务条款,并进行域名验证。完成后,Certbot 会自动修改 Nginx 配置以启用 HTTPS,并在 /etc/letsencrypt/live/mysite.com/ 保存证书文件。你可以使用浏览器访问 https://mysite.com/ 检查是否启用锁定图标来验证 SSL 是否生效。

第 11步:完成安装并测试

至此,WordPress 环境已经准备就绪。打开浏览器,访问 http://mysite.com/(或 https,如果证书已生效)即可进入 WordPress 安装界面。按照提示选择语言、设置站点标题、管理员账号和密码等信息完成安装。安装完成后,可以用管理员账号登录后台管理网站。

注意:安装成功后,为安全起见可以将网站目录所有权还原给 root 用户,例如:

sudo chown -R root:root /var/www/html/mysite.com

这样做并不会影响 WordPress 的正常访问,但可以减少不必要的写权限。(如果日后需要在后台安装插件或主题,可临时切换回 www-data 用户权限。)