WordPress 接入 Cloudflare 后出现 Error 526,我是这样解决的

最近在给一个 WordPress 站点配置 Cloudflare 时,网站突然打不开了,页面上只显示了一行醒目的错误:

Invalid SSL certificate
Error code 526

第一次遇到这个错误的人,很容易以为是 WordPress 出了问题,甚至怀疑是插件、主题或者服务器环境配置错了。

实际上,这个错误和 WordPress 基本没什么关系。

问题出在 Cloudflare 和你的服务器之间的 HTTPS 连接。

事情是怎么发生的

当时我的网站架构比较简单:

Cloudflare
    ↓
Nginx
    ↓
Docker WordPress

Cloudflare 开启代理之后,访问域名直接报 526。

服务器本身是能访问的:

curl http://127.0.0.1:8082

WordPress 正常返回页面。

Nginx 也启动正常。

但是只要经过 Cloudflare,页面就直接报错。

刚开始我以为是 Nginx 配置写错了,折腾了半天才发现根本不是这么回事。

Error 526 到底是什么意思

简单来说:

Cloudflare 访问你的服务器时,发现服务器上的 SSL 证书不合法。

于是直接拒绝建立 HTTPS 连接。

整个过程大概是这样:

用户
 ↓
Cloudflare
 ↓
你的服务器

很多人会忽略一点:

浏览器和 Cloudflare 之间的 HTTPS 正常,并不代表 Cloudflare 和源站之间也正常。

526 其实是在第二段链路出的问题。

最常见的几个原因

这些年折腾过不少站点,526 基本逃不过下面几种情况。

1. 根本没配置 HTTPS

有些人把域名接入 Cloudflare 之后,直接开启了:

Full (strict)

结果服务器根本没有 443。

或者 Nginx 只监听了 80。

Cloudflare 一访问就傻眼了。

这种情况直接报 526。


2. 证书过期了

这个属于最常见的。

尤其是自己手动申请证书,又忘了续期。

服务器自己访问可能没注意,但 Cloudflare 校验时非常严格。

只要过期,直接拒绝连接。


3. 域名和证书不匹配

比如访问:

notavia.cc

结果证书签的是:

test.example.com

或者只有:

www.notavia.cc

没有裸域。

Cloudflare 同样会认为证书无效。


4. Cloudflare Origin Certificate 配置错了

这个我自己踩过坑。

证书申请完了:

cf-origin.pem
cf-origin.key

也放进服务器了。

结果 Nginx 配置写错路径:

ssl_certificate /etc/nginx/ssl/xxx.pem;

reload 后居然没仔细检查。

Cloudflare 一访问就是 526。

后来执行:

nginx -t

才发现配置有问题。

我最后是怎么解决的

我的方案比较简单。

直接使用 Cloudflare 的 Origin Certificate。

第一步

Cloudflare 后台:

SSL/TLS
    ↓
Origin Server
    ↓
Create Certificate

创建证书。

会得到两段内容:

Certificate
Private Key

保存到服务器。

例如:

/etc/nginx/ssl/cf-origin.pem
/etc/nginx/ssl/cf-origin.key

第二步

Nginx 配置 HTTPS:

server {
    listen 443 ssl;
    server_name notavia.cc www.notavia.cc;

    ssl_certificate     /etc/nginx/ssl/cf-origin.pem;
    ssl_certificate_key /etc/nginx/ssl/cf-origin.key;

    location / {
        proxy_pass http://127.0.0.1:8082;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto https;
    }
}

然后检查:

nginx -t

确认没有报错。

重载:

nginx -s reload

第三步

Cloudflare SSL 模式改成:

Full (strict)

这里很多教程让你选 Flexible。

个人并不推荐。

既然都已经有 HTTPS 了,直接 Full (strict) 就行。

安全性更高,也省得后面出现各种奇怪问题。

顺便说说 WordPress 的一个坑

526 解决之后,我又遇到了另一个问题。

访问域名:

https://notavia.cc

结果自动跳到了:

http://ip:8082

看起来像 SSL 没配置好。

其实是在初始化的时候,用的是http://ip+8082,所有每次都调整到这个页面了。

在 设置>常规 页面中,设置中修改一下站点地址就可以了。

我的经验

这些年做过不少网站,不管是 WordPress、Hexo 还是各种 SaaS 项目。

只要看到:

Error 526

我第一反应一定不是去看 WordPress。

而是先检查:

openssl s_client -connect 域名:443

看看证书是不是正常。

然后检查:

nginx -t

确认 Nginx 是否正确加载证书。

最后再看 Cloudflare SSL 模式。

基本上十分钟内就能定位问题。

很多时候并不是系统复杂,而是某个小配置没有对上。

总结

Error 526 本质上只有一句话:

Cloudflare 不信任你服务器上的 SSL 证书。

解决思路也很明确:

  • 检查证书是否存在
  • 检查证书是否过期
  • 检查域名是否匹配
  • 检查 Nginx 是否正确加载证书
  • 使用 Cloudflare Origin Certificate
  • SSL 模式使用 Full (strict)

如果你的 WordPress 是 Docker 部署,再额外检查一下反向代理头是否传递正确。

大部分情况下,问题都能很快解决。

至少我这次踩坑,就是这么排查出来的。

一条评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注