Decentralization? We're still early!

Cloudflare Tunnel 托管 WordPress 完全指南

  • Cloudflare Tunnel 托管 WordPress 完全指南

    發布人 Brave 2026-01-16 02:59

    在 2026 年,通过 Cloudflare Tunnel 托管 WordPress 已成为个人开发者、小型企业乃至中型团队的首选方案。本文将详细介绍如何整合本地服务器与Cloudflare Tunnel 实现WordPress托管,包括具体流程、配置要点和安全最佳实践。


    一、核心架构

    你的架构通常是这样的:

    用户浏览器 ↔ Cloudflare 全球网络 ↔ Cloudflare Tunnel (cloudflared) ↔ 本地 WordPress (通常在 Docker 或 Nginx 中)

    🔍 架构深度解析:

    这一架构的核心在于 cloudflared——一个轻量级守护进程,它在你的本地服务器上运行,仅建立「出站连接」到 Cloudflare 的全球边缘网络。这意味着:

    • 你的本地服务器无需开放任何入站端口
    • 所有流量都经过 Cloudflare 的全球 CDN 加速
    • 你的真实 IP 地址对外完全不可见
    • cloudflared 与 Cloudflare 之间的通信始终加密

    从技术实现角度来看,当用户访问你的域名时,请求首先到达距离用户最近的 Cloudflare 边缘节点,然后通过已建立的加密隧道转发到你的本地 WordPress 服务器。响应数据则沿着相同路径返回用户。


    二、为什么它比传统方式更适合 WordPress

    🔐 解决 HTTPS 问题

    WordPress 非常依赖 HTTPS(否则后台可能无法登录或样式加载错误)。Cloudflare Tunnel 会在云端自动处理 SSL 证书,你本地只需要运行简单的 HTTP 服务。

    📋 技术细节补充:传统方式下,你需要使用 Let's Encrypt 或其他证书颁发机构申请 SSL 证书,还要配置自动续期——这对于家庭网络用户尤其困难,因为许多 ISP 会封锁 80/443 端口,导致证书验证失败。而使用 Cloudflare Tunnel 后:

    • Cloudflare 自动为你的域名提供受信任的 SSL 证书
    • 建议在 Cloudflare 控制台中将 SSL/TLS 加密模式设置为「Full (Strict)」以获得最佳安全性
    • 同时开启「Always Use HTTPS」选项,强制所有 HTTP 请求重定向至 HTTPS
    • 启用 HSTS(HTTP Strict Transport Security),强制浏览器仅使用安全连接

    🛡️ 防御攻击

    WordPress 是黑客攻击的重灾区。通过 Tunnel,你的真实 IP 完全隐藏在 Cloudflare 防火墙(WAF)之后,可以有效拦截暴力破解和 DDoS 攻击。

    ⚠️ 为什么 WordPress 是高危目标?

    根据统计,WordPress 驱动了全球超过 40% 的网站,这使得其登录页面成为网络攻击的频繁目标,尤其是暴力破解攻击和恶意机器人流量。传统安全措施(如强密码和双因素认证)虽然有帮助,但无法从根本上阻止攻击者持续尝试。

    🆚 传统端口转发 vs Cloudflare Tunnel 安全对比:

    安全维度传统端口转发Cloudflare Tunnel
    入站端口必须开放 80/443 端口零入站端口,仅出站连接
    真实 IP 暴露完全暴露,可被直接攻击完全隐藏在 Cloudflare 之后
    DDoS 防护无,需额外购买服务内置 Cloudflare 全球网络防护
    SSL 证书需自行申请和维护自动配置和续期
    配置复杂度需配置路由器、防火墙规则一条命令即可完成
    动态 IP 影响路由器重启后链接可能失效不受影响,隧道自动重连

    三、特别注意:WordPress 的"反向代理"配置

    由于 Cloudflare Tunnel 充当了反向代理,你需要在 WordPress 中做一点微调,否则会出现样式失效或无法登录的问题:

    📝 修改 wp-config.php

    你需要告诉 WordPress 流量是经过代理进入的,在文件中添加以下代码:

    /* 强制开启 HTTPS 检测 */ if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
        $_SERVER['HTTPS'] = 'on';
    }

    🚨 避免重定向循环的关键提示:

    一个常见问题是当你在 wp-config.php 中同时设置 WP_HOMEWP_SITEURL 为 https 时,可能导致重定向循环。这是因为:

    1. Tunnel 将请求以 HTTP 协议转发到本地 WordPress
    2. WordPress 检测到非 HTTPS,尝试重定向到 HTTPS 域名
    3. 请求再次通过 Cloudflare 进入,形成无限循环

    ✅ 正确做法:添加上述 $_SERVER['HTTPS'] = 'on'; 代码,让 WordPress 知道实际上用户已经在使用 HTTPS 访问,而保持 WP_SITEURLWP_HOME 使用 http 协议指向本地。

    🌐 设置站点地址

    在 WordPress 后台的「设置」中,将 WordPress 地址 (URL)站点地址 (URL) 都改为你的正式域名(如 https://www.yourdomain.com)。

    💡 数据库层面的备用方案:

    如果你无法访问后台,也可以通过直接修改数据库来设置站点地址:

    UPDATE wp_options SET option_value = 'https://www.yourdomain.com' WHERE option_name = 'siteurl';
    UPDATE wp_options SET option_value = 'https://www.yourdomain.com' WHERE option_name = 'home';

    四、部署建议

    为了最简化管理,建议在本地使用 Docker Compose 同时运行 WordPress 和 Cloudflare Tunnel。

    📦 示例 docker-compose.yml 结构

    • db: MySQL/MariaDB 数据库
    • wordpress: 网站主体
    • cloudflared: 运行 Tunnel 客户端,将请求转发给 wordpress 容器

    🆕 完整的生产级 docker-compose.yml 示例(2025年最佳实践):

    version: '3.8'
    
    services:
      # Cloudflare Tunnel 服务
      tunnel:
        image: cloudflare/cloudflared:latest
        restart: unless-stopped
        command: tunnel run
        environment:
          - TUNNEL_TOKEN=你的隧道令牌  # 从 Cloudflare Zero Trust 控制台获取
        depends_on:
          - wordpress
    
      # MariaDB 数据库
      db:
        image: mariadb:10.11
        command: '--default-authentication-plugin=mysql_native_password'
        volumes:
          - db_data:/var/lib/mysql
        restart: always
        environment:
          - MYSQL_ROOT_PASSWORD=生成一个强密码
          - MYSQL_DATABASE=wordpress
          - MYSQL_USER=wordpress
          - MYSQL_PASSWORD=生成另一个强密码
        # 注意:不再需要 expose 端口到主机
    
      # WordPress 主服务
      wordpress:
        image: wordpress:latest
        volumes:
          - wp_data:/var/www/html
        restart: always
        environment:
          - WORDPRESS_DB_HOST=db
          - WORDPRESS_DB_USER=wordpress
          - WORDPRESS_DB_PASSWORD=与上面的 MYSQL_PASSWORD 保持一致
          - WORDPRESS_DB_NAME=wordpress
        depends_on:
          - db
        # 注意:不需要暴露端口到主机,仅需容器间通信
    
    volumes:
      db_data:
      wp_data:

    ⚙️ 关键配置说明:

    1. 无需暴露端口:由于使用 Tunnel,WordPress 容器无需将端口映射到主机。流量完全在 Docker 内部网络中流转。
    2. Tunnel 配置指向容器名:在 Cloudflare Zero Trust 控制台配置 Tunnel 时,服务地址应设置为 http://wordpress:80(而非 localhost),因为在 Docker Compose 网络中,容器可以通过服务名互相访问。
    3. 强烈建议更改默认的数据库用户名、密码和数据库名称,以增强安全性。

    🔑 获取 Tunnel Token 的步骤:

    1. 登录 Cloudflare Dashboard
    2. 进入「Zero Trust」→「Networks」→「Tunnels」
    3. 点击「Create a tunnel」,选择「Cloudflared」类型
    4. 为隧道命名(如 "wordpress-tunnel")
    5. 选择 Docker 作为安装方式,复制生成的 Token
    6. 配置 Public Hostname,将你的域名指向 http://wordpress:80

    五、进阶安全建议(针对 WordPress)

    既然你已经接入了 Cloudflare,强烈建议开启以下功能:

    🔥 WAF 规则

    在 Cloudflare 后台开启 WordPress 专用防护规则。

    📊 Cloudflare WAF 托管规则详解:

    Cloudflare 提供多层 WAF 防护,包括:

    规则集说明计划要求
    Cloudflare Managed Ruleset由 Cloudflare 安全团队维护,快速应对新漏洞Pro 及以上
    OWASP Core Ruleset基于 OWASP CRS v3.x,提供行业标准防护Pro 及以上
    WordPress 专用规则使用 "wordpress" 标签的规则,专门防护 WP 漏洞Pro 及以上

    🎚️ OWASP 规则集配置建议:

    • Paranoia Level(偏执级别):建议从 PL1 开始,逐步提升。更高级别防护更严格,但可能导致误报
    • Score Threshold(分数阈值)
      • Low (60):最宽松,适合初期测试
      • Medium (40):推荐的生产环境设置
      • High (25):最严格,可能阻止部分正常流量

    ⚠️ 重要提醒:2025年6月15日起,旧版 WAF 托管规则 API 已停止支持。如果你使用 Terraform 管理 Cloudflare 配置,请确保更新到新版资源。

    📋 Page Rules

    针对 /wp-admin 后台设置访问限制(例如仅允许你自己的 IP 访问,或者再加一层 Cloudflare Access 验证)。

    🛡️ WordPress 管理后台推荐 Page Rule 配置:

    创建一个针对 yourdomain.com/wp-admin/ 的 Page Rule,启用以下设置:

    • Security Level: High(提高安全等级)
    • Cache Level: Bypass(管理后台不应被缓存)
    • Disable Apps: 是(禁用 Cloudflare 应用)
    • Disable Performance: 是(禁用 Minify、Rocket Loader、Mirage、Polish 等优化功能,这些仅应用于前端)

    🔐 使用 Cloudflare Zero Trust Access 保护后台(强烈推荐):

    相比简单的 IP 限制,Cloudflare Zero Trust 提供了更强大、更灵活的身份验证访问控制:

    工作原理:

    • 在用户看到 WordPress 登录页面之前,先通过 Cloudflare 的身份验证关卡
    • 彻底阻止暴力破解攻击——攻击者甚至无法触及 wp-login.php
    • 消除机器人流量对服务器资源的消耗

    配置步骤:

    1. 进入 Cloudflare Zero Trust 控制台
    2. 选择「Access」→「Applications」→「Add an application」
    3. 选择「Self-hosted」类型
    4. 配置 Application 名称和域名(如 yourdomain.com/wp-admin
    5. 创建 Access Policy,设置访问规则:
      • Include:允许特定邮箱域名(如 @yourdomain.com
      • Require:可选,强制要求 MFA(多因素认证)
      • Exclude:可选,排除特定条件

    认证方式选择:

    • One-Time Pin (OTP):通过邮箱发送一次性验证码(免费且简单)
    • Google / Azure AD / Okta:集成企业身份提供商
    • 硬件密钥:支持 FIDO2 安全密钥

    💡 进阶技巧:同时为 /wp-login.php/xmlrpc.php 创建 Access 策略,全面保护 WordPress 入口点。

    🚦 速率限制(Rate Limiting)

    针对登录页面设置请求频率限制,防止暴力破解攻击:

    推荐配置:

    • 路径/wp-login.php
    • 阈值:每分钟 10 次请求
    • 动作:Block 1 小时
    • 备注:Rate Limiting 规则现已在所有 Cloudflare 计划中无限量提供

    六、故障排除指南

    🔧 常见问题与解决方案:

    问题原因解决方案
    样式加载失败/页面错乱HTTPS 检测问题添加 $_SERVER['HTTPS'] = 'on'; 到 wp-config.php
    无限重定向循环WP_HOME/WP_SITEURL 配置冲突保持这两个值使用 http,仅依赖 $_SERVER['HTTPS'] 设置
    Tunnel 连接被拒绝Docker 网络配置错误确保使用容器名(如 http://wordpress)而非 localhost
    后台无法登录Cookie 域名不匹配检查站点地址设置是否正确指向公网域名
    Zero Trust 页面不显示DNS 记录未代理确保 DNS 记录状态为「Proxied」(橙色云朵)

    ✅ 总结

    Cloudflare Tunnel 和 WordPress 是"黄金搭档"。你只需要准备好域名,在本地把 WordPress 跑起来,然后用一条 Tunnel 命令映射出去即可。不需要折腾复杂的路由器端口转发或证书申请。

    🎁 使用 Cloudflare Tunnel 的核心优势回顾:

    优势说明
    🔒 零端口暴露无需在路由器上开放任何端口
    🌐 全球 CDN 加速自动利用 Cloudflare 遍布全球的边缘节点
    🛡️ 企业级安全DDoS 防护、WAF、Bot 管理开箱即用
    📜 自动 SSL无需手动申请或续期证书
    🆓 免费使用Tunnel 本身完全免费
    配置简单比传统方案减少 90% 的配置步骤

    Brave 回复 1 week, 3 days ago 1 成員 · 0 回复
  • 0 回复

歡迎留言回复交流。

Log in to reply.

讨论開始
00 回复 2018 年 6 月
現在