522错误源于Cloudflare无法连接源站Web服务器,需检查端口监听、HTTPS重定向逻辑及SSL配置;真实IP需通过X-Forwarded-For头与可信代理段配置获取;phpMyAdmin路径必须绕过缓存;WAF应针对其POST请求精准跳过规则。
phpMyAdmin 被 Cloudflare 代理后出现 522 错误
522 是 cloudflare 的「连接超时」错误,本质是它连不上你的源站 php 服务。phpmyadmin 本身不抗代理层延迟,常见于你启用了 cloudflare 的「full」或「full (strict)」ssl 模式,但源站 web 服务器(如 nginx/apache)未正确响应 https 请求或监听了错误端口。
关键不是 phpMyAdmin 配置问题,而是反向代理链路断在了 Web 服务器这一环。
- 确认 Web 服务器监听
80或443端口(Cloudflare 默认只转发这两个端口),且防火墙放行 - 如果源站强制 HTTPS 重定向(比如
return 301 https://$host$request_uri),而 Cloudflare 使用 HTTP 回源(即「Off」或「Flexible」SSL 模式),会触发重定向死循环 → 改用return 301 https://$host$request_uri前加判断:if ($http_x_forwarded_proto != "https") { return 301 https://$host$request_uri; } - Nginx 中避免在 server 块里写
ssl_certificate,Cloudflare 回源走 HTTP,证书由它处理;否则 Nginx 可能拒绝非 TLS 连接
Cloudflare 回源时 phpMyAdmin 拿不到真实客户端 IP
默认情况下,phpMyAdmin 读 $_SERVER['REMOTE_ADDR'],拿到的是 Cloudflare 的节点 IP(比如 173.245.48.0/20 段),而非访客真实 IP。这会影响登录限制、日志记录甚至部分安全插件行为。
必须让 Web 服务器信任 Cloudflare 的 X-Forwarded-For 头,并把可信头里的第一个 IP 覆盖给 PHP。
- Apache:在虚拟主机配置中加入
RemoteIPHeader X-Forwarded-For和RemoteIPTrustedProxy 173.245.48.0/20 103.21.244.0/22 103.22.200.0/22 103.31.4.0/22 141.101.64.0/18 108.162.192.0/18 190.93.240.0/20 188.114.96.0/20 197.234.240.0/22 198.41.128.0/17 162.158.0.0/15 104.16.0.0/12 172.64.0.0/13 131.0.72.0/22(Cloudflare 官方 IP 段,需定期更新) - Nginx:启用
real_ip_header X-Forwarded-For+set_real_ip_from后跟上述全部 CIDR 段;再确保fastcgi_param REMOTE_ADDR $remote_addr改为fastcgi_param REMOTE_ADDR $realip_remote_addr - phpMyAdmin 无需改代码,只要
$_SERVER['REMOTE_ADDR']被 Web 服务器正确覆写即可
phpMyAdmin 后台登录页被 Cloudflare 缓存导致 403 或空白
Cloudflare 默认缓存静态资源,但 phpMyAdmin 的 index.php、login.php 是动态脚本,一旦被缓存,用户可能看到过期的 CSRF token、空表单,甚至直接返回 403(因缓存了上一个用户的登录态校验失败响应)。
立即学习“PHP免费学习笔记(深入)”;
必须在 Cloudflare 规则中明确排除所有 phpMyAdmin 路径的缓存。
- 在 Cloudflare Dashboard → Rules → Page Rules,添加规则:
yourdomain.com/phpmyadmin/*→ 设置「Cache Level」为「Bypass」 - 如果用了子目录(如
/pma/),规则要覆盖对应路径:yourdomain.com/pma/* - 避免使用「Cache Everything」类规则全局开启缓存,phpMyAdmin 不适合任何主动缓存
- 检查响应头是否含
CF-Cache-Status: HIT,若存在说明仍被缓存,需排查 Page Rule 是否生效或有更高优先级规则覆盖
Cloudflare WAF 误杀 phpMyAdmin POST 请求
Cloudflare 的「Managed Rulesets」(尤其是 OWASP CRS)会拦截包含 SQL 关键字(SELECT、UNION)、base64 字符串或长 POST body 的请求,而 phpMyAdmin 执行查询时必然触发这些特征,导致 403 或 495 错误。
不能关整个 WAF,应精准放行 phpMyAdmin 流量。
- 创建 Firewall Rule:
(http.request.uri.path contains "/phpmyadmin/") and (http.request.method == "POST")→ Action: «Skip» - 如果路径是别名(如
/db/),把/phpmyadmin/替换为实际路径 - 不要仅靠 User-Agent 或 Referer 过滤,容易绕过或误伤;URI 路径最可靠
- 跳过规则后,仍保留 WAF 对其他路径(如 WordPress 后台)的防护能力
真实 IP 和 WAF 规则是两个独立维度,别以为开了「Trust X-Forwarded-For」就自动绕过 WAF —— Cloudflare 在解析请求头前已做完规则匹配,顺序不能错。



















