背景:WSL下安装的WordPress网站使用域名www.test.com,通过hosts配置DNS,映射到本地127.0.0.1;Cloudflare里买的域名是dian.com。
1. 安装 cloudflared
在 WSL 里:
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb
2. 登录 Cloudflare
cloudflared tunnel login
会弹出一个链接,在浏览器里选择你的 Cloudflare 账号和域名。
授权成功后,会在用户目录下生成授权证书文件:/root/.cloudflared/cert.pem
3. 创建隧道
cloudflared tunnel create wsl-wordpress
它会输出一个隧道 ID,同时在 ~/.cloudflared/ 下生成一个配置文件(json 格式)
vi ~/.cloudflared/config.yml
内容
tunnel: wsl-wordpress
credentials-file: /root/.cloudflared/a88f8479-2ebd-4b67-9b16-3f0a0bd8e7ac.json
ingress:
- hostname: wp.dian.com
service: http://localhost:80
- service: http_status:404
注意:
hostname: wp.dian.com→ 你要映射的公网域名(可以自定义一个二级域名,比如wp.dian.com)service: http://localhost:80→ 这里写你 WSL WordPress 的监听端口(如果是127.0.0.1:8000就写http://localhost:8000)
配置 Cloudflare DNS
4. 给域名添加隧道 DNS 解析
cloudflared tunnel route dns wsl-wordpress wp.dian.com
Cloudflare 的 DNS 面板会自动添加一条 CNAME 记录:wp.dian.com CNAME <随机隧道ID>.cfargotunnel.com 。
执行:
root@LG:~/packages# cloudflared tunnel route dns wsl-wordpress wp.dian.com
2025-09-16T07:11:57Z INF Added CNAME wp.dian.com which will route to this tunnel tunnelID=a88f8479-2ebd-4b67-9b16-3f0a0bd8e7ac
这样Cloudflare后台会有一条DNS记录: wp.dian.com -> a88f8479-2ebd-4b67-9b16-3f0a0bd8e7ac.cfargotunnel.com
这样全世界访问 wp.dian.com 时,会被转到你的本地服务。
5. 运行隧道
假设 WSL 里的 WordPress 在 http://localhost:8000:
cloudflared tunnel run wsl-wordpress
现在访问 https://wp.dian.com 就会直接连到你本地的 WordPress。
6. 修改 WordPress 配置
WordPress 本地之前用的是 www.dian.com,现在要切换到 https://wp.g9home.com,不然登录、跳转会出错。
修改方法:
UPDATE wp_options
SET option_value = 'https://wp.dian.com'
WHERE option_name IN ('siteurl','home');
以后如果你想要用 自定义子域名(比如 pay.dian.com),只要在 config.yml 的 hostname 里改一下,再跑一遍 cloudflared tunnel route dns 即可。
www.test.com 只能本地用,外部(WordPress.com)无法访问,所以必须用 Cloudflare 真实托管的域名来跑 WooPayments 授权。