WordPress Cloudflare CDN + Nginx源站配置完整指南
如果你用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免费版提供:
- 全球200+边缘节点
- DDoS防护和Web防火墙
- HTTP/3 (QUIC) 支持
- Automatic Platform Optimization (APO) 可付费开启HTML缓存
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 → 加密模式改为Full或Full (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.conf的http { }块中:
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配置后,可以继续优化:
- 如果还没配置源站SSL,可以参考WordPress LNMP安装完整指南中Let's Encrypt配置部分
- 想进一步提速,可以配合WordPress速度优化2026:Object Cache与Autoloaded Options实战中Redis Object Cache配置
- 如果有更多Cloudflare配置问题,可以查看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: