news 2026/9/15 13:18:48

宝塔面板+WordPress+Cloudflare全链路HTTPS配置实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
宝塔面板+WordPress+Cloudflare全链路HTTPS配置实战指南

1. 为什么选择“宝塔 + WordPress + Cloudflare”这套组合

先聊点实际的。我见过太多站长,网站上线第一天流量还不错,结果没几天就被浏览器标成“不安全”,甚至被运营商插广告、被劫持跳转。原因很简单:没上HTTPS。

HTTPS这件事,说大不大,说小不小。对于个人博客、企业展示站、甚至小型电商站来说,它解决的三个核心问题是:数据加密传输身份认证防止内容被篡改。但很多朋友卡在了“不知道怎么配SSL证书”这一步,尤其是当你既用了宝塔面板,又想套Cloudflare做CDN和防护的时候,证书配置的顺序、模式选错一环,整个站点就会反复跳错、打不开、或者证书失效。

这套组合拳——宝塔面板管服务器、WordPress管内容、Cloudflare管加速和安全、SSL证书管加密——是我这几年在几十个站点上反复验证过的方案。它能解决“个人站长没有专业运维经验”这个最大痛点,让一个完全不懂Linux命令的小白,也能在自己的服务器上跑起来一个带完整HTTPS加密的WordPress站点。

这篇文章我会从零开始,把整个链路拆开讲清楚。适合谁看?准备从零搭建WordPress站点的新手、想给现有站点补上HTTPS的老站长、以及被Cloudflare SSL模式搞到崩溃的朋友。看完之后,你能照着步骤完整操作一遍,并且理解每一步背后的“为什么”。

2. 动手之前的整体思路:证书链路和流量走向

2.1 先搞懂浏览器到服务器之间发生了什么

开始配之前,我强烈建议你先花五分钟理解一个概念:HTTPS不是把证书装在服务器上就完事了。当你的网站套了Cloudflare之后,用户浏览器访问的是Cloudflare的节点,不是你的源站服务器。这就产生了两段链路:

  • 第一段:浏览器 → Cloudflare节点
  • 第二段:Cloudflare节点 → 你的源站服务器(宝塔上的Nginx/Apache)

每一段都需要有证书,否则浏览器会报错,或者Cloudflare那边会显示“SSL不可用”。这就是很多朋友遇到“明明在宝塔里装了证书,网站却还是打不开”的根本原因——你只配了源站证书,但Cloudflare和源站之间没对上。

这套架构的流量走向是这样的:用户访问你的域名,DNS解析到Cloudflare的任播IP,Cloudflare根据你的源站地址去请求你的服务器,服务器返回内容后再由Cloudflare压缩、缓存、加HTTP头,最后返回给用户。整个过程里,用户只和Cloudflare通信,只有Cloudflare知道你的真实服务器IP。

注意:这里有一个关键点——如果你只想让Cloudflare做CDN加速,不想要它的防护功能,也建议保留“小云朵”(代理状态),因为只有代理状态下,用户的真实IP才会被Cloudflare隐藏,HTTPS证书才能由Cloudflare统一签发。

2.2 方案选型:全自动模式还是手动模式

Cloudflare提供了多种SSL/TLS加密模式,常见的有四种:

模式含义适用场景
Off(关闭)完全不用SSL纯HTTP测试环境
Flexible(灵活)浏览器到Cloudflare是HTTPS,Cloudflare到源站是HTTP源站没证书时临时用
Full(完全)两端都是HTTPS,但不校验源站证书有效性源站有自签名证书或测试证书
Full (Strict)(完全严格)两端都是HTTPS,且强制校验源站证书有效正式环境推荐,本文采用

我的建议是:正式上线站点,直接选 Full (Strict)。这个模式下,Cloudflare会强制要求你的源站服务器(宝塔)上,安装一张有效期内、域名匹配、由受信任CA签发的证书,否则会报 526 错误。听起来要求高,但一旦配好,整个链路的安全等级是最高的。

那源站证书从哪来?两种常见途径:宝塔面板自带的自动续期证书(Let's Encrypt),或者自己用 acme.sh 签发的证书。我推荐用宝塔面板内置的 Let's Encrypt 免费证书,因为它在宝塔里点几下就能完成配置,还能自动续期,省去手动续费的烦恼。

2.3 为什么用“证书”而不是“云盾”或“WAF”硬扛

可能有人问:Cloudflare本身就有WAF和防护功能,为什么还要在源站上配证书?答案是:Cloudflare的防护是给用户看的,源站证书是给Cloudflare看的。如果你的源站没有证书,Cloudflare在 Full (Strict) 模式下会拒绝连接——这是它的安全底线,防止数据在Cloudflare和源站之间裸奔。

换句话说,Cloudflare承担了“外敌防御”,而源站证书承担了“内部通道加密”。两段链路都加密,才叫真正的全链路HTTPS。这也是我想强调的:HTTPS不是单纯的“装个证书”,而是一整套信任体系的落地

3. 宝塔面板部署WordPress:环境配置与注意事项

3.1 环境选择:Linux + Nginx + MySQL + PHP

在宝塔面板上部署WordPress,标准环境组合是CentOS/Ubuntu + Nginx + MySQL 8.0 + PHP 8.1+。为什么推荐这个组合?Nginx在静态文件处理和高并发上比Apache更好,PHP 8.1+对WordPress的主题和插件兼容性也很成熟。如果你用的是BT官方推荐的一键LNMP安装,直接默认选项即可。

安装宝塔面板时,我一般选择编译安装而不是极速安装。编译安装虽然耗时更长(大概30到60分钟),但性能和兼容性更稳。极速安装适合场景是“只想要个最快测试环境”,正式站点不建议。

装完之后,第一步不是急着建站,而是改端口和绑定域名。宝塔面板默认端口是8888,建议把它改成高位端口(比如 28888),并且只允许你的IP访问。这一步很多人忽略,等被扫到了才后悔。

3.2 创建站点:数据库、PHP版本、伪静态设置

在宝塔左侧菜单点“网站 → 添加站点”,这里有几个关键配置项要注意:

  • 域名:填写你已经解析到Cloudflare的域名(比如www.example.com),备注随便填。
  • 数据库:选择MySQL,数据库类型选 utf8mb4,因为WordPress的很多中文内容用这个编码最稳。
  • PHP版本:选你刚装好的PHP 8.1或8.2。
  • 伪静态:建议选 WordPress 模板,否则文章页的固定链接会404。

创建完成后,宝塔会自动生成一个站点目录(默认在/www/wwwroot/你的域名),还会帮你建好FTP账号和数据库账号。建议记好这些自动生成的口令,后续安装WordPress要用到。

3.3 安装WordPress本体:手动下载还是用宝塔一键部署

宝塔面板提供了一个“一键部署WordPress”的功能,如果你是第一次搞,用它确实快。但我个人更推荐手动下载WordPress官方安装包来装,原因有两个:一是你能确认源码来自官方,免得被第三方篡改;二是手动安装的过程能让你理解WordPress的文件结构,后续排查问题才有思路。

具体步骤:

  1. /www/wwwroot/你的域名目录下,下载最新版WordPress安装包:

    cd /www/wwwroot/你的域名 wget https://cn.wordpress.org/latest-zh_CN.zip unzip latest-zh_CN.zip mv wordpress/* ./
  2. 修改目录权限,让PHP进程能读写:

    chown -R www:www /www/wwwroot/你的域名 chmod -R 755 /www/wwwroot/你的域名
  3. 浏览器访问你的域名,进入WordPress安装引导,填入之前创建好的数据库名、用户名、密码,完成安装。

注意:WordPress安装向导会让你填数据库主机,默认是localhost,如果你用的宝塔默认配置,保持localhost就行。但如果你在BT面板里改了MySQL监听端口或开启了远程访问,这里就需要填127.0.0.1:端口号

4. Cloudflare接入:DNS代理、SSL模式与常用配置

4.1 注册和添加站点到Cloudflare

Cloudflare注册免费账号后,进入Dashboard点击“Add a site”,输入你的域名,它会自动扫描该域名下已有的DNS记录。扫描出来后,你需要核对两件事:

  • 确保有一条 A 记录指向你的服务器IP。
  • 保证CNAME记录(如果有www)也指向同一IP。

然后Cloudflare会给你两个NS地址,你要到自己域名注册商那边,把默认的DNS服务器改成Cloudflare提供的这两个NS。这一步叫“托管DNS”,改完之后等半小时到几小时,DNS会全球生效,Cloudflare平台显示“Active”就算接管成功了。

实操心得:域名DNS切换到Cloudflare后,原有的解析都会继承过来,不需要重新添加,但建议在“DNS → Records”页面核对一遍。特别是邮件相关记录(MX和TXT),千万别漏了,否则邮箱收发会出问题。

4.2 SSL/TLS模式设置为Full (Strict)

站点激活后,进入“SSL/TLS → Overview”,把加密模式选为Full (Strict)。此时Cloudflare会提示你需要源站有有效证书,不用慌,这就带你到下一步——回宝塔去配源站证书。

这里还要顺手设置一下SSL/TLS的“Edge Certificates”选项卡:

  • Always Use HTTPS:启用,强制所有HTTP请求307跳转到HTTPS。
  • Automatic HTTPS Rewrites:启用,自动把页面里的http://资源地址改成https://,避免混合内容报错。
  • Minimum TLS Version:建议设为 1.2。为什么不是1.3?因为有些老手机和低版本浏览器不支持1.3,1.2覆盖更广且安全性足够。

4.3 关闭Cloudflare的“灵活模式”的坑

我见过很多朋友踩这个坑:站点还没配好源站证书,就先把Cloudflare的SSL模式设成了 Flexible,结果浏览器那边确实显示绿锁了,但源站和Cloudflare之间是明文HTTP。这不仅导致数据没真正加密,还会在你后续启用 Strict 模式时出现502/526错误,影响体验。

所以我的建议是:宁可早期让站点保持“无证书”的HTTP状态,也不要开 Flexible 模式。等宝塔面板里的源站证书配好了,直接让Cloudflare切到 Full (Strict)。整个过程大概只要10分钟,不存在“过渡期”需求。

5. 宝塔面板SSL证书配置:获取、部署与自动续期

5.1 用宝塔内置的Let's Encrypt免费证书

宝塔面板的“站点 → SSL”页面,是配置源站证书的核心入口。推荐用“Let's Encrypt”免费证书,因为宝塔内置了自动续期脚本,到期前一个月会自动帮你续期,不需要任何人工干预。

操作步骤:

  1. 在“站点 → SSL”页面,选择“Let's Encrypt”标签。
  2. 勾选你要签发证书的域名(建议同时勾选根域名example.comwww.example.com)。
  3. 选“DNS验证”方式。为什么不用文件验证?因为你的域名已经接了Cloudflare代理,文件验证时Cloudflare的CDN缓存会干扰验证过程,经常导致验证失败。DNS验证会通过解析记录来确认域名归属权,更稳定。
  4. 点击“申请”,等待十几秒到一分钟,证书就签发成功了。

签发成功后,宝塔会自动把证书内容填到“证书”和“密钥”两个文本框里,并在底部显示“已部署”状态。此时你可以直接访问源站IP + HTTPS试试,比如https://你的服务器IP,如果浏览器报证书不匹配是正常的,因为你访问的是IP而不是域名;直接访问https://你的域名(先别走Cloudflare)就能看到证书有效的绿锁。

5.2 DNS验证需要怎么配合Cloudflare

刚才说到DNS验证,这里细讲一下。Let's Encrypt的DNS验证会在你的域名下新增一个_acme-challenge的TXT记录,宝塔面板会弹出一个提示框,让你去域名DNS处添加这条TXT记录。但因为你的DNS现在托管在Cloudflare,所以要去Cloudflare的“DNS → Records”里添加。

添加完TXT记录后,回到宝塔的SSL申请页面,点击“验证并签发”。这里有个细节:TXT记录在Cloudflare有一个“代理状态”的概念,TXT记录不会被Cloudflare代理,只有A/CNAME才会显示云朵图标,所以不必担心。

5.3 更新根证书链(Origin CA证书的情况)

这里补充一个更稳妥的做法:从Cloudflare侧给源站签发一张Origin CA证书。这张证书的信任链来自Cloudflare根证书,配置在源站上时,Cloudflare会直接信任它,缘于同一个信任根,所以即使你用了自签名的根证书也没问题。

具体操作:Cloudflare的“SSL/TLS → Origin Server”页面,点击“Create Certificate”,它会生成一张有效期最长15年的证书和私钥。把这对证书和私钥粘贴到宝塔面板的SSL设置里,保存并开启“SSL”按钮。

这种做法比Let's Encrypt更省心,因为它有效期长达15年,不需要频繁续期。不过要注意:Origin CA证书只在Cloudflare有记录,你要是哪天把域名从Cloudflare迁走,这张证书就失效了,到时得换回公共CA证书。

5.4 证书部署之后的Nginx配置检查

证书部署完成,宝塔会自动修改Nginx配置,并重启Nginx。但有时候你可能会遇到“保存SSL后站点直接504”的情况。这多半是Nginx配置文件里重复添加了SSL监听端口导致的。排查方法:

nginx -t

如果提示conflicting server nameduplicate listen,那说明你在“站点设置 → 配置文件”里,和宝塔自动生成的SSL配置段冲突了。解决办法是删掉你手动添加的listen 443 ssl;ssl_certificate相关行,把这些参数交给宝塔统一管理。

6. WordPress侧的安全加固与HTTPS适配

6.1 后台强制开启HTTPS并处理混合内容

只要Cloudflare的“Always Use HTTPS”和宝塔源站证书都配好了,浏览器访问整站应该都是HTTPS。但是WordPress后台里还有一个环节,就是“设置 → 常规”里的WordPress地址和站点地址。如果这两个地址还写着http://,那么很多资源会继续以HTTP加载,导致浏览器控制台报“Mixed Content”错误。

解决办法:

  1. 在WordPress后台,把这两个地址都改成https://你的域名
  2. 如果你希望强制所有HTTP请求跳转到HTTPS,可以在wp-config.php里加:
    $_SERVER['HTTPS'] = 'on';
    这样Nginx层和PHP层都能感知到请求是HTTPS,避免WordPress生成相对路径时带上http://

6.2 网站的固定链接和伪静态规则

默认WordPress的固定链接可能是?p=123这种动态网址,不美观也不利于SEO。建议设置为“文章名”或“自定义结构”(比如/archives/%post_id%.html)。设置之后,如果文章页出现404,说明Nginx的伪静态规则没生效。在宝塔的站点设置里,把伪静态模板改成“WordPress”,保存即可。

6.3 缓存与CDN穿透的坑

WordPress的缓存机制和CDN配合时,有一个容易让人抓狂的坑:插件缓存和Cloudflare缓存互相冲突,导致更新文章后,网站页面还是旧的。解决办法:

  • 在宝塔里启用“网站缓存”时,选择“缓存模式”为“无”,或者只开“静态文件缓存”。
  • Cloudflare侧,在“Caching → Configuration”里设置缓存级别为“Standard”,并且把/wp-admin/*加入“Never Cache”规则。
  • 如果你用的是W3 Total Cache或WP Rocket这类插件,建议把“CDN”相关选项关掉,让Cloudflare自己处理缓存,否则会有两套缓存逻辑互相打架。

6.4 强化登录安全:避开常见爆破路径

HTTPS部署完成之后,网站安全等级确实提升了一截,但WordPress的登录接口(wp-login.php)仍然是公网上最常见的暴力破解目标。我强烈建议做两件事:

  1. 限制登录失败次数,可以使用宝塔的“Nginx防火墙”插件里的“CC攻击防护”功能,设置/wp-login.php的请求频率限制。
  2. 关闭XML-RPC接口(xmlrpc.php),因为它是暴力破解的著名入口,很多攻击脚本就是用它来批量试密码的。在宝塔站点的配置里,加一段阻止访问该文件的规则即可。

7. 常见问题与排查技巧实录

7.1 问题速查表

现象可能原因解决办法
浏览器访问显示“您的连接不是私密连接”Cloudflare和源站证书不匹配,或SSL模式设置错误检查Cloudflare的SSL模式是否为Full (Strict);检查源站证书是否有效且域名匹配
网站能打开,但页面“不安全”或锁头带红叉混合内容,页面里有HTTP资源启用Cloudflare的Automatic HTTPS Rewrites;手动检查主题和插件里的硬编码http://地址
访问时提示526 Invalid SSL certificateCloudflare无法验证源站证书重新确认宝塔里的证书是否完整且未过期;确认Nginx配置里证书路径是否正确
网页排版错乱,CSS/JS加载不出资源URL仍是http,或者CDN缓存了旧的HTTP版本清空Cloudflare缓存;在WordPress后台用“Better Search Replace”插件把http://批量替换为https://
更新文章后页面不变缓存冲突清空宝塔网站缓存和Cloudflare缓存;检查缓存插件是否与CDN冲突
后台登录不上,一直跳转回登录页Cookies未使用HTTPS传输在Cloudflare开启Always Use HTTPS;检查wp-config.php是否有强制登录HTTPS的配置

7.2 如何验证证书是否真的生效

很多朋友问了:“我明明配了,怎么知道它生效了?”这里分享两个简单的方法。

第一种,用浏览器开发者工具。按 F12 → Network,随便点击一个请求,看 Security 标签页,里面会显示证书类型、加密协议(TLS 1.3等)、证书签发机构等信息。如果显示“Valid certificate”之类的,就说明证书有效。

第二种,用命令行直接查询证书的到期时间和常用参数:

echo | openssl s_client -servername 你的域名 -connect 你的域名:443 2>/dev/null | openssl x509 -noout -dates

输出里的notBeforenotAfter就是证书的有效期起止时间。这个方法常用于定时巡检源站证书是否快到期,配合cron脚本,可以在到期前一周给你发邮件报警。

7.3 换服务器IP之后需要做的事

搬机房或换IP之后,最容易踩坑的就是Cloudflare还是旧源站IP。此时网站会直接502或者超时。解决办法:登录Cloudflare,在“DNS → Records”里找到那条A记录,把IP改成新服务器的IP,保存后等几十秒,然后去宝塔里确认新服务器的Nginx和防火墙放行了443端口。

这里给个经验值:宝塔默认会放行80和443端口,但如果你用了腾讯云/阿里云的安全组策略,服务器层面也要放行这些端口,否则无论Cloudflare怎么刷,源站都连不上。

7.4 关于“SSL证书过期”的最后一道防线

Let's Encrypt证书有效期是90天,宝塔会自动续期,理论上不用管。但我在生产环境里遇到过几次:因为Nginx配置报错导致nginx -t失败,自动续期脚本也会跟着失败。所以建议每月检查一次nginx -t是否通过,并且留意宝塔“计划任务”里的续期日志。必要时可以设置一条每月的手动续期任务:

bt 14

或者直接用宝塔计划任务里的“Let's Encrypt续期”脚本,在每月1号的凌晨3点跑一次。这样就算自动续期失效,也能通过定时任务补上。

提示:如果你的源站证书用的是Cloudflare Origin CA,有效期长达15年,基本不用考虑续期问题,这也是我把这个方案列为正式环境首选的原因之一。

8. 踩过几次坑之后,我的实际体会

写到这里,整套流程就完整了。但我想在结尾再啰嗦几句,因为这些是我在真实操作中反复踩过、最想提醒后来人的点。

第一,所有配置做完之后,一定要把Cloudflare的“SSL/TLS”页面截图存下来。对你后续排查问题非常有帮助,尤其是当你忘记了自己用的是Flexible还是Full Strict时,一张截图能帮你快速定位。

第二,别迷信“一键部署”。宝塔的“一键部署WordPress”功能确实省事,但我见过的百来个站点故障里,有很大一部分都是因为一键部署时对服务器做了定制化修改,导致后面配置SSL、伪静态、缓存时无所适从。手动走一遍流程,踏踏实实理解每一步,后面出问题你才敢动手。

第三,HTTPS上线之后,一定要主动检查一遍全站的HTTP资源。我遇到过一个案例:网站首页看着一切正常,但“联系我们”页里有一张老图片用的是http://地址,在浏览器里被自动拦截,用户点击后页面就崩了。这就是典型的“大树底下没草”,SSL证书是配好了,但细节没跟上。用https://你的域名/wp-admin/登录后台,安装一个“Really Simple SSL”插件,它会自动帮你处理大部分混合内容问题,同时还能设置一个临时的301跳转,把旧HTTP流量全部转到HTTPS上。

第四,也是最让我心疼的一条经验:我第一次给客户配HTTPS时,因为偷懒没把源站证书的私钥备份下来,结果服务器硬盘坏了,整个站点的证书没法恢复,只能重新签发。所以请在宝塔的“SSL → 证书”页面,手动把“证书”和“密钥”复制到U盘或密码管理器里,一式两份。这比任何技术优化都重要。

第五,上线HTTPS不是终点,而是起点。浏览器地址栏出现那把绿色锁,只是满足了“传输安全”这一层。真正安全的网站,还需要做到:定期备份、及时更新WordPress核心和插件、把登录页加上二次验证(Cloudflare的Access或TOTP插件都行)、以及养成查看Nginx错误日志的习惯。把这些日常动作坚持下来,你的站点才算进入“持续安全”的状态。

最后说一个和我自己最相关的例子。我自己的博客就是用这套方案搭的:宝塔面板 + 阿里云轻量服务器 + WordPress + Cloudflare Full (Strict) + Let's Encrypt自动续期。从上线到现在一年多了,没有遇到过证书过期导致的故障,访问速度在国内外都还算稳定,偶尔遇到某个地区的用户访问慢,大多也是本地运营商的问题。这套组合的维护成本很低,每个月花几分钟看一眼日志就行。如果你也想给自己的网站彻底解决“明文传输”的隐患,按着这篇文里的步骤走一遍,应该能少走不少弯路。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 13:18:33

C51倒计时器设计:定时器中断、数码管动态扫描与矩阵键盘实战

简介:基于C51单片机的倒计时器设计完整工程文件包,面向单片机初学者和电子类课程设计人群,解决从定时设定到声光提醒的完整人机交互实现问题,适用于实验室计时、生产线控制及教学演示等场景。压缩包共14个文件,包含Kei…

作者头像 李华
网站建设 2026/9/15 13:18:13

OpenMed OpenMRS与DHIS2集成指南:非洲健康数据去标识化落地

OpenMed OpenMRS与DHIS2集成指南:非洲健康数据去标识化落地 【免费下载链接】openmed Local-first healthcare AI: clinical NER & HIPAA PII de-identification that runs 100% on-device. 2,200 medical models, 21 languages, Apple MLX Python, no cloud, …

作者头像 李华
网站建设 2026/9/15 13:16:10

微信小程序点餐系统源码级实现:云开发+支付验签+实时同步

简介:这是一套基于微信平台的点餐系统小程序完整源码,面向Java Web开发初学者与小程序全栈实践者,解决餐饮类轻应用从后端架构到前端交互的一站式学习需求。资源共1286个文件,涵盖123个Java后端逻辑文件、138个Vue组件、178个JS交…

作者头像 李华
网站建设 2026/9/15 13:16:06

二叉树根节点值等于子节点和算法解析

1. 问题背景与定义最近在刷算法题时遇到一个有趣的二叉树问题:如何判断一棵树的根节点值是否等于其所有子节点值之和。这个问题看似简单,却涉及二叉树遍历、递归思想等核心算法概念。同时,结合网络热词"所有房子组成一颗树"的场景&…

作者头像 李华
网站建设 2026/9/15 13:15:25

TensorFlow2.0中文汉字手写体识别:从数据管道到模型部署

简介:这份基于TensorFlow2.0的中文汉字手写体识别项目,面向计算机、数学、电子信息等专业学生,可作为课程设计、期末大作业及毕业设计的完整参考,也适合希望上手深度学习图像识别的初学者进行实战演练。压缩包内共94个文件&#x…

作者头像 李华