← 返回首页

WordPress Cloudflare CDN + Nginx源站配置完整指南

WordPressCloudflareCDNNginxAPO

如果你用WordPress建站,把Cloudflare作为CDN加到源站前面是提升速度的标准动作——全球边缘节点缓存静态资源,TTFB可以从300ms降到30ms。但配置过程有不少暗坑:SSL证书模式选错会死循环,Nginx不认识真实访客IP会让安全插件形同虚设,APO缓存和WooCommerce购物车冲突让你卖不出东西。

本文说透5个真实踩坑点,全部给出可复制的配置命令。

为什么WordPress需要Cloudflare CDN

WordPress动态页面每次访问都要查询数据库,即使加了Nginx FastCGI缓存,服务器在物理距离远的情况下TTFB仍然高。根据Google Web.dev的说明,TTFB是LCP的40%——TTFB慢,Google排名就吃亏。

Cloudflare免费版提供:

APO可以把WordPress整站HTML缓存到边缘,官方标称最高提速300%,对于博客类静态为主的内容效果尤为明显。

坑一:SSL模式选Flexible导致重定向循环

问题现象:网站打开后无限302重定向,浏览器报"Too many redirects"。

原因:Cloudflare SSL模式设为Flexible,但源站Nginx配置了强制HTTPS跳转。Flexible模式下Cloudflare和源站之间是HTTP,源站发现HTTP访问就跳转到HTTPS,Cloudflare又用HTTP回源,形成死循环。

解决方案:Cloudflare后台SSL/TLS → 加密模式改为FullFull (strict)

# Full:源站可以是自签名证书或Let's Encrypt
# Full (strict):必须是受信任CA签发的证书

如果使用Let's Encrypt生成源站证书(推荐):

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com --non-interactive

然后在Nginx配置中删除强制跳转HTTPS的代码:

# 删除或注释掉这段,否则会死循环
# server {
#     listen 80;
#     server_name yourdomain.com;
#     return 301 https://$server_name$request_uri;
# }

改为Cloudflare强制HTTPS(Dashboard → SSL/TLS → Always Use HTTPS = On)。

坑二:Nginx不识别真实访客IP,安全插件失效

问题现象:Wordfence显示所有访问都来自Cloudflare的IP段,地理屏蔽和IP白名单完全失效。

原因:Cloudflare是反向代理,所有请求的src IP都变成了Cloudflare的IP段(103.21.x.x、104.16.x.x等),Nginx默认看不到真实访客IP。

解决方案:在Nginx配置中启用realip模块,恢复真实IP。

创建/etc/nginx/cloudflare.conf

# Cloudflare IPv4
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.7.0/24;
set_real_ip_from 104.16.0.0/13;
set_real_ip_from 104.24.0.0/14;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
# Cloudflare IPv6
set_real_ip_from 2400:cb00::/32;
set_real_ip_from 2606:4700::/32;
set_real_ip_from 2803:f800::/32;
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2405:8100::/32;
set_real_ip_from 2a06:98c0::/29;
set_real_ip_from 2c0f:fb48::/32;

real_ip_header CF-Connecting-IP;

将此文件include到nginx.confhttp { }块中:

http {
    include /etc/nginx/cloudflare.conf;
    # ... 其他配置
}
sudo nginx -t && sudo systemctl reload nginx

配置后,日志里会显示真实访客IP而不是Cloudflare IP,Wordfence等IP安全插件可以正常工作。

Cloudflare IP范围可能更新,建议每周用cron自动更新:

# /etc/cron.weekly/cloudflare-realip-update
curl -s https://www.cloudflare.com/ips-v4 | sed 's/$/;/' > /tmp/cf_ips
curl -s https://www.cloudflare.com/ips-v6 | sed 's/$/;/' >> /tmp/cf_ips
# 合并到cloudflare.conf的set_real_ip_from行

坑三:Cloudflare APO和WooCommerce缓存冲突

问题现象:开启APO后,客户加购物车正常,但结账时购物车经常是空的;订单状态页面显示混乱。

原因:APO缓存了包含购物车状态的HTML页面。当一个用户访问后,其购物车内容被缓存为静态HTML,后续用户看到的是前一个用户的购物车。

解决方案

1. 在WordPress后台 → Cloudflare插件设置 → Page Rules,排除动态页面:

/checkout/*
/cart/*
/my-account/*
/?add-to-cart=*

2. 或者在wp-config.php中通过环境变量关闭APO对动态路由的缓存:

// 关闭APO对WooCommerce动态页面的缓存
if (isset($_COOKIE['woocommerce_cart_hash']) ||
    isset($_COOKIE['woocommerce_items_in_cart'])) {
    header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
    header('X-Cache-Level: off');
}

3. 如果不使用WooCommerce,只做博客/APO完全可以裸奔上阵,自动缓存静态HTML,性能提升明显。

坑四:Authenticated Origin Pulls导致源站返回400

问题现象:开启"源站证书验证"(Authenticated Origin Pulls)后,网站返回400 Bad Request: No required SSL certificate was sent。

**原因**:Cloudflare的Authenticated Origin Pulls使用mTLS双向认证——源站Nginx必须配置Cloudflare提供的CA证书才能接收来自Cloudflare的请求。如果没有在Nginx里配置ssl_client_certificate,就会拒绝连接。

解决方案

1. 下载Cloudflare Origin Pull CA证书:

sudo mkdir -p /etc/cloudflare
sudo curl -o /etc/cloudflare/cloudflare-origin-pull-ca.pem \
  https://developers.cloudflare.com/ssl/static/authenticated_origin_pull_ca.pem

2. 在Nginx site配置中启用客户端证书验证:

server {
    listen 443 ssl;
    server_name yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
    ssl_client_certificate /etc/cloudflare/cloudflare-origin-pull-ca.pem;
    ssl_verify_client on;  # 开启mTLS验证

    # ... 其他配置
}

3. Cloudflare后台确认:SSL/TLS → Origin Server → 勾选Authenticated Origin Pulls

4. 验证:sudo nginx -t && sudo systemctl reload nginx

⚠️ 如果访问出现400,检查Cloudflare SSL/TLS模式是否为Full或Full(strict),Flexible模式不支持Origin Pulls。

坑五:APO缓存导致WordPress后台变慢

问题现象:开启APO后,前台速度飞快,但/wp-admin后台操作卡顿,有时候保存文章后页面还是旧内容。

原因:APO默认缓存整站HTML,包括/wp-admin的管理界面。当你在后台发布文章、更新插件时,Cloudflare还在 serve 旧的缓存页面。

解决方案

在Nginx配置中排除wp-admin不经过Cloudflare缓存:

location /wp-admin/ {
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    # 明确不缓存
    proxy_no_cache 1;
    proxy_cache_bypass 1;
    add_header X-Cache-Level "bypass";
}

或者使用Cloudflare插件(Free版)的Cache Rules,显式排除/wp-admin路径。

完整的配置检查清单

检查项状态
Cloudflare SSL模式 = Full/Full(strict)
Nginx无HTTP→HTTPS强制跳转(交给Cloudflare处理)
Nginx cloudflare.conf已include且nginx -t通过
真实IP已在access.log中可见
WooCommerce动态路由已排除APO缓存
Authenticated Origin Pulls使用前已配置ssl_client_certificate
/wp-admin路径已设置no-cache头

下一步

完成Cloudflare配置后,可以继续优化:

👉 立即参与MiniMax API内测,获取AI模型推理Token:https://platform.minimaxi.com/subscribe/token-plan?code=E5yur9NOub&source=link

📌 This article was AI-assisted generated and human-reviewed | TechPassive — An AI-driven content testing site focused on real tool reviews

🔗 Recommended Tools

These are carefully selected tools. Using our affiliate links supports us to keep producing quality content:

☁️ DigitalOcean Cloud ⚡ Vultr VPS 📚 WordPress Books 🔍 WordPress SEO Books 🌐 Web Hosting Books 🐳 Docker Books 🐧 Linux Books 🐍 Python Books 💰 Affiliate Marketing 💵 Passive Income Books 🖥️ Server Books ☁️ Cloud Computing Books 🚀 DevOps Books ⭐ MiniMax Token Plan
← 返回首页