Ubuntu26.04 使用Caddy运行PHP8.5跑WordPress网站

现在各大HTTPS证书提供商都有免费的证书,但是时间已经从一年的变成了3个月,就是说每隔三个月就要换一次,不然HTTPS请求无法处理,还会被搜索引擎和浏览器认为不友好的网站,无法正常打开。

下面介绍Ubuntu 26.04 原生部署 WordPress 操作方法,这是最稳、最简单的完整教程,搭配 Caddy + PHP + MySQL,一步一步复制粘贴就能跑起来,还自带 HTTPS。

caddy运行WordPress网站

一、整体架构

Ubuntu 26.04 + Caddy(Web 服务器)+ PHP 8.3 + MySQL(数据库)+ WordPress

二、安装依赖(Caddy、MySQL、PHP)

1. 安装 Caddy

如果你还没装,请参考上一篇《Ubuntu 26.04 安装 Caddy 详细教程(新手友好版)

2. 安装 MySQL

sudo apt install -y mysql-server

初始化安全设置(一路 Y 即可):

sudo mysql_secure_installation

3. 安装 PHP 8.5 及 WordPress 必需扩展

Ubuntu 26.04 系统官方默认仓库只有 PHP 8.5,如果要安装其它版本:如, php8.3 可以添加其它源:

sudo apt install -y php-fpm php-mysql php8.5-curl php8.5-gd php8.5-mbstring php8.5-xml php8.5-zip php8.5-intl php8.5-imagick

三、创建 MySQL 数据库与用户

sudo mysql

在 MySQL 里执行以下 4 行(配置一下自己的数据库密码即可):

CREATE DATABASE wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY '你的密码';
GRANT ALL ON wordpress.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

记住这 3 个信息,后面要用:

  • 数据库名:wordpress
  • 用户名:wpuser
  • 密码:你自己设的那个

四、下载并部署 WordPress

1. 创建网站目录

sudo mkdir -p /var/www/wordpress
cd /var/www/wordpress

2. 进入目录,下载最新版 WordPress,并解压(可以下载zip版的)

wget https://wordpress.org/latest.tar.gz
tar -zxvf latest.tar.gz --strip-components=1

3. 设置权限(非常重要)

sudo chown -R www-data:www-data /var/www/wordpress

五、配置 Caddy 并启用 HTTPS

编辑配置文件:

sudo vim /etc/caddy/Caddyfile

直接粘贴下面完整配置caddyfile(替换成你的信息):

{
    email 你的邮箱@qq.com
}

你的域名.com {
    root * /var/www/wordpress
    encode gzip zstd

    php_fastcgi unix//run/php/php8.5-fpm.sock

    file_server

    rewrite match_not {file} {
        to {path} {path}/ /index.php?{query}
    }

    header {
        X-Frame-Options SAMEORIGIN
        X-Content-Type-Options nosniff
        Strict-Transport-Security max-age=31536000;
    }
}

保存退出,重载 Caddy:

sudo systemctl reload caddy

如果你想本地测试一下,可以像我这样添加一个配置:

:8080 {
    root * /var/www/wordpress
    encode gzip zstd

    php_fastcgi unix//run/php/php8.5-fpm.sock
    file_server

    rewrite match_not {file} {
        to {path} {path}/ /index.php?{query}
    }
}

说明:

  • :8080 = 本地任意 IP 都可以访问,端口 8080
  • 没有 HTTPS,纯 HTTP,本地测试最稳
  • 不会出现证书错误、跳转循环


六、防火墙放行 80/443

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload

七、网页安装 WordPress

打开浏览器访问:

https://你的域名.com

按提示填写:

  • 数据库名:wordpress
  • 用户名:wpuser
  • 密码:你之前设的
  • 数据库主机:localhost
  • 表前缀:默认 wp_ 即可

然后设置站点标题、管理员账号密码,安装完成。


八、常用命令

# 重启 PHP
sudo systemctl restart php8.3-fpm

# 重启 Caddy
sudo systemctl restart caddy

# 重启 MySQL
sudo systemctl restart mysql

# 查看 Caddy 状态
systemctl status caddy

九、常见问题

  1. 打不开网站:域名没解析、防火墙没开、Caddy 配置错等
  2. 数据库连接失败:密码 / 用户名错,或 MySQL 没启动
  3. 后台无限跳转:没加 wp-config 里的 HTTPS 代码
  4. 图片 / 主题无法安装:目录权限不对,重新执行 chown

附上一个比较完整的Caddyfile文件配置内容,可以参考一下:

# 全局通用配置
{
    # 证书到期通知邮箱(必填,Let’s Encrypt告警)
    email admin@你的域名.com
    # 证书缓存目录(避免重复申请证书,减少ACME请求)
    storage /var/lib/caddy/certificates
    # 限制ACME并发请求,防止触发Let’s Encrypt限流封禁
    acme_ca https://acme-v02.api.letsencrypt.org/directory {
        rate_limit 10 per_hour
    }
    # 开启HTTP/3,优化HTTPS访问速度
    http3
    # 全局日志分割,7天自动清理
    log {
        output file /var/log/caddy/global.log {
            roll_size 200MiB
            roll_keep 7
        }
        format json
    }
}

# ====================== 公网域名配置(带自动HTTPS)======================
# 替换为你的域名,同时匹配主域名+www二级域名
你的域名.com, www.你的域名.com {
    # 网站根目录
    root * /var/www/wordpress
    # 开启gzip+zstd双压缩,大幅提升页面加载速度
    encode gzip zstd

    # PHP8.5 FastCGI解析(Ubuntu26.04固定sock路径)
    php_fastcgi unix//run/php/php8.5-fpm.sock {
        # 透传真实客户端IP、HTTPS协议,根治WordPress HTTPS跳转循环
        header_up X-Real-IP {remote_host}
        header_up X-Forwarded-For {remote}
        header_up X-Forwarded-Proto {scheme}
        header_up Host {host}
        # 上传文件超时适配(大图片/主题包上传)
        read_timeout 120s
    }

    # WordPress 标准伪静态规则,固定链接正常访问
    try_files {path} {path}/ /index.php?{query}

    # 开启静态文件服务
    file_server

    # ---------------------- 安全请求头加固 ----------------------
    header {
        # 隐藏Caddy版本号,防止漏洞扫描
        -Server
        # 禁止MIME类型嗅探
        X-Content-Type-Options nosniff
        # 禁止被iframe嵌套,防点击劫持
        X-Frame-Options SAMEORIGIN
        # 严格跨域引用策略
        Referrer-Policy strict-origin-when-cross-origin
        # HSTS强制HTTPS缓存1年,浏览器永久走HTTPS,杜绝http跳转循环
        Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
        # 屏蔽危险权限
        Permissions-Policy camera=(), microphone=(), geolocation=()
    }

    # ---------------------- 静态资源长期缓存(减少服务器请求) ----------------------
    @staticAssets path *.jpg *.jpeg *.png *.gif *.svg *.ico *.webp *.css *.js *.woff *.woff2 *.ttf
    header @staticAssets Cache-Control "public, max-age=31536000, immutable"
    header @staticAssets ETag ""

    # ---------------------- 拦截危险文件访问 ----------------------
    @blockSensitive path /wp-config.php /wp-config-sample.php /xmlrpc.php /readme.html /license.txt /wp-admin/install.php
    respond @blockSensitive 403

    # ---------------------- 单独站点访问日志 ----------------------
    log {
        output file /var/log/caddy/wordpress-site.log {
            roll_size 100MiB
            roll_keep 7
        }
        format console
    }
}

# ====================== 强制www跳转至无www(可选,不需要直接删除本段) ======================
www.你的域名.com {
    redir https://你的域名.com{uri} permanent
}

线上防止 HTTPS 跳转死循环核心配置

php_fastcgi 内添加 4 条header_up透传头,把前端 HTTPS 状态传递给 PHP,WordPress 能识别当前是 HTTPS 环境,不会反复跳转 http→https:

caddyfile

header_up X-Forwarded-Proto {scheme}

配套wp-config.php补充代码双重保险:

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
    $_SERVER['HTTPS'] = 'on';
}
define('WP_HOME','https://你的域名.com');
define('WP_SITEURL','https://你的域名.com');
本文首发于 58Linux技术博客,专注Ubuntu桌面使用、Linux服务器运维与网站搭建实战。

发表评论

粤ICP备10052831号 | © 2026 58Linux 技术笔记. All Rights Reserved. | 联系我们 | 关于本站
本站内容开放共享,仅供学习交流 | 专注 Ubuntu & Linux 实战教程
Built with GeneratePress