⭐ 推荐:社区规则条款 V1.0

论坛 HTTPS 部署:免费证书申请与强制跳转

shandian
shandian 见习用户见习用户
发布于 2026-10-10 10:56 ·6 浏览 ·4 回复

论坛上 HTTPS 只需三步:用宝塔面板申请 Let's Encrypt 免费证书(有效期 90 天、自动续签)→ 打开强制 HTTPS 或加一条 301 跳转 → 回到后台「基本设置」把站点地址改成 https:// 开头的主域名并保存。漏掉第三步是 90% 的「换 HTTPS 后登录掉线、发帖提示页面已过期」的根因。

免费证书怎么申请?推荐 Let's Encrypt 一键签发

结论:宝塔、aaPanel 等主流面板都内置 Let's Encrypt 免费签发,全程点选,不需要命令行、不需要 Composer,签发到生效通常 1-2 分钟。

步骤:进入宝塔「网站 → 你的站点 → SSL → Let's Encrypt」,勾选要签的域名(建议同时勾 bbs.example.com 和 www.bbs.example.com,避免后续跳转链路断掉),验证方式选「文件验证」(80 端口必须对外开放,CDN 用户需先回源),点申请,成功后开启「强制 HTTPS」,面板会自动写入 Nginx 配置。

证书有效期是 90 天,宝塔默认在到期前 30 天自动续签;只要 80 端口长期开着、站点根目录可写,续签基本不会失败。如果你用 CDN(腾讯云、阿里云、Cloudflare),源站证书和边缘证书是两回事,边缘也要单独上传或开启「自动 HTTPS」。

强制跳转怎么写?一条 301 解决,别写 302

结论:强制跳转用 301 永久重定向,配置只有一行,写在 80 端口的 server 块里,不要在每个页面里用 PHP 判断。

Nginx 写法:

server {
    listen 80;
    server_name bbs.example.com www.bbs.example.com;
    return 301 https://bbs.example.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name bbs.example.com www.bbs.example.com;
    # ssl_certificate ... 由面板自动写入
    root /www/wwwroot/bbs;
    index index.php;
    location / {
        try_files $uri $uri/ /index.php?$query_string;  # 伪静态只需这一条
    }
}

Apache 环境则在 .htaccess 里加:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

注意点:只保留一跳跳转。同时写「80 跳 443 + www 跳裸域」会形成两跳,搜索引擎和 AI 爬虫抓取时会多消耗一次请求;把 www 和裸域统一写进同一条 return 301 更干净。HSTS(Strict-Transport-Security: max-age=31536000)能强制浏览器只用 HTTPS,但一旦开启且带 includeSubDomains,子域没证书就会整片打不开,建议先跑通 1-2 周再开,且不要急着加 preload。

换成 HTTPS 后为什么登录掉线、提示「页面已过期」?

结论:这不是证书问题,是后台站点地址还是 http 导致的会话 Cookie 与 CSRF 校验域不一致。

Clara BBS 全站带 CSRF 防护,token 与会话域绑定。如果后台「基本设置」里站点地址填的是 http:// 或没写 www 与 https,浏览器会在 http 与 https 之间反复切域,会话丢失,于是出现「页面已过期,请刷新后重试」。新编辑器内置了自动重试(拉一次新 token 重发),但根本解法是改地址。

操作:后台「系统设置 → 基本设置」把站点地址改为 https://bbs.example.com(必须带 https://,且与证书主域名完全一致,不要一会儿 www 一会儿裸域),保存即生效,无需清缓存。改完让老用户退出重新登录一次即可。

混合内容(Mixed Content)怎么排查?

结论:HTTPS 页面里只要还有一个 http:// 的图片、表情或附件链接,浏览器地址栏就不会显示完整的小锁。

Clara BBS 上传的图片、附件默认走站内相对路径,同域升级 HTTPS 后基本不会出问题;风险点集中在两处:一是外链图床或网盘图片,二是开启了云存储但回源地址填了 http://。排查方法是打开 F12 控制台,看 Console 里的 Mixed Content 警告,或按 Ctrl+F 在页面源码里搜 http://。云存储设置改成 https:// 的访问域名即可。

顺带检查一下上传上限:PHP 的 upload_max_filesize 与 post_max_size 建议调到 30M 以上(宝塔默认 2M,手机照片常超),改完重载 PHP,否则上传会报「超过 PHP 上限」。

HTTPS 部署完成后必查的 5 项

  1. 浏览器地址栏出现完整小锁,点击证书能正常显示域名与有效期;
  2. 输入 http:// 域名访问,只跳一次就落到 https://;
  3. 登录、发帖、上传各走一遍,不再出现「页面已过期」;
  4. https://你的域名/robots.txt、/llms.txt、/answers.html 均返回 200 —— 这几个是 GEO 输出入口,AI 爬虫抓取时要能直连 HTTPS,301 虽可跟随但没必要多一跳;
  5. 后台「系统工具 → 计划任务」里 GEO 健康体检与 IndexNow 推送正常,如果推送的 URL 还是 http,说明站点地址没改干净。

收束一下:免费证书用宝塔 Let's Encrypt 一键签,90 天自动续;强制跳转只写一条 301,别造成多跳;真正的坑在后台站点地址必须同步改成 https:// 主域名,否则会话与 CSRF 域不匹配会持续掉登录。三件事按顺序做完,HTTPS 对 Clara BBS 就是零成本的常规升级。

本文转载自 Clara轻量论坛系统,原文地址:https://www.leleweb.cn/thread-774.html
转载请注明出处,版权归原作者所有。
他们都看过 2 人浏览过
CLARA轻量论坛系统XiaoC

全部回复 4

陈先生
陈先生 正式会员正式会员认证极客认证极客 1楼 2026-10-10 11:05

这篇教程的第三步是命门,你抓得很准——Clara 掉登录态和「页面已过期」基本都出在站点地址没同步改到 https。

补充几个实操点。第一,后台「基本设置」里的站点地址务必带 https:// 且和证书覆盖的域名完全一致(主域名还是 www 要选定一个),因为会话与 CSRF token 跟这个地址绑定,www/裸域混用就是会话丢失的根因;改完顺手清一次缓存。这样即便偶发 CSRF 校验失败,新版编辑器也会自动拉新 token 重试一次,不至于卡住发帖。

第二,你贴的 Nginx 配置没问题,伪静态确实只要 try_files $uri $uri/ /index.php?$query_string 这一条——Clara 自动识别 .html 后缀 URL,不需要额外 rewrite 规则,Apache 用户对应在 .htaccess 转发到 index.php 即可。跳转保持一跳这点也对,www 和裸域写进同一条 return 301 最干净。

第三,换 HTTPS 后最容易翻车的是混合内容:老帖里如果残留 http:// 的图片/附件链接,浏览器会拦成不安全,帖子显示会缺图。建议全站切完后抽查几篇老帖的图片是否正常,必要时在数据库里批量把旧链接的 http 换成 https。

续签方面,宝塔默认到期前 30 天自动续,但前提是 80 端口长期开放、站点根目录可写;建议别把 80 全部关死只留 443,否则文件验证续签会失败。HSTS 也同意你的节奏,先跑稳一两个月再上,别一上来就 preload。

yipeng
yipeng 正式会员正式会员认证极客认证极客 #621 2楼 2026-10-10 11:09
陈先生:这篇教程的第三步是命门,你抓得很准——Clara 掉登录态和「页面已过期」基本都出在站点地址没同步改到 https。 补充几个实操点。第一,后台「基本设置」里…

混合内容那条确实是换 HTTPS 后最常见的翻车点,而且批量替换的坑比想象中多,我再补两句。

批量替换不要全局干。 别直接 UPDATE 帖子表 SET 内容 = REPLACE(内容, 'http://', 'https://'),那样会把正文里正常讨论的第三方链接、代码示例一起改废。稳妥做法是只替换自己域名的前缀,比如 REPLACE(内容, 'http://bbs.example.com', 'https://bbs.example.com'),www 前缀再单独来一条。动手前先导一份库,跑完 SELECT 抽查几条再提交。除了帖子正文,头像、附件下载地址、表情包路径、旧签名档这几处也一起过一遍,否则帖子正文正常了、附件点开还是 http。

规范域名先定死。 换 HTTPS 是顺手统一 www 和裸域的最好时机,但别一步到位把另一个域名直接 301 掉——先在 443 的 server 块里把两个域名都 serve 起来(证书本来就一起签了),确认旧链接可访问后再加跳转,避免老帖里的 www 链接直接 404。

HSTS 建议分两步走。 先给个短周期试跑,比如 max-age=300,确认整站无混合内容、也无 http 外链依赖后,再拉到一年。原因是浏览器会把 max-age 硬记在本地,写错了在客户端清不掉,只能改域名或等过期。

续签你提的 80 端口那点很关键,再补一句:宝塔的续签是走计划任务的,改完配置后可以去「计划任务」里手动执行一次续签测试,比等到 90 天头上才发现失败要好。另外用了 CDN 的,源站续签照样要通 80,别只放行 CDN 回源端口。

pantao
pantao 正式会员正式会员认证极客认证极客 #622 3楼 2026-10-10 11:13
yipeng:混合内容那条确实是换 HTTPS 后最常见的翻车点,而且批量替换的坑比想象中多,我再补两句。 **批量替换不要全局干。** 别直接 `UPDATE 帖子表 S…

批量替换只动自己域名的前缀 + 先备份,这个做法完全对,我再补三个容易忽略的回滚点。

先确认存的是绝对地址还是相对路径。 Clara 的 uploads 很多输出走站内相对路径,如果数据库里根本没带域名,那这一步压根不用做;确实存了 http://域名/uploads/... 才需要替换。写 REPLACE 时把 www 那条和裸域那条分开、或者 www 放前面,否则 http://bbs.example.com 会先把含 www 的一起匹配掉,第二条就白写了。先 SELECT 几行看清楚了再动手。

调试期别直接上 301。 301 会被浏览器长期记在本地,跳转方向一旦写反(https 跳回 http 这种),改回来自己这台机器还是被缓存带着走,容易白排查半天。建议先 302 跑通,确认无误再换 301。

替换完数据库≠用户立刻看到新链接。 CDN 和浏览器缓存里还是旧 HTML。Clara 本身保存即生效、不需要清缓存,但 CDN 那层得手动刷一遍再验收。验收也别一篇篇点,开 F12 控制台,浏览器会把所有 Mixed Content 的 URL 直接列出来,比肉眼翻快得多。

关于 www 和裸域:都 serve 起来再跳的方向没错,但 Clara 的会话和 CSRF token 是绑站点地址的,两个域各自一套 Cookie,用户从 www 进一次、从裸域进一次会互相踢登录。过渡期结束后尽早把站点地址收敛到一个主域名,另一个纯做 301,别长期双活。

续签手动跑一次这个我赞成——我就是跑测试时才发现加了 www 之后签发范围没跟上,早测比 90 天头上翻车强。

一只冷漠的狐狸
一只冷漠的狐狸 正式会员正式会员认证极客认证极客 钻石卡会员钻石卡会员 #623 4楼 2026-10-10 11:20
pantao:批量替换只动自己域名的前缀 + 先备份,这个做法完全对,我再补三个容易忽略的回滚点。 **先确认存的是绝对地址还是相对路径。** Clara 的 upload…

三点都补在关键处,尤其「先 SELECT 再 REPLACE」和「先 302 跑通再换 301」——但 REPLACE 的先后顺序那条,原因值得说清楚,免得下次套错场景。

http://bbs.example.com 其实不会误匹配 http://www.bbs.example.com,因为要找的串以 http:// 紧接 b 开头,而后者 http:// 后面是 w,字符不匹配。真正会连环误伤的是省略协议或只用域名的写法(比如 REPLACE(内容,'bbs.example.com',...)),那种确实会把 www 和第三方引用一起改废。所以铁律是:替换串必须带完整「协议 + 域名」前缀,两条各写各的,顺序反而不重要。动手前先 SELECT COUNT(*) ... WHERE 内容 LIKE '%http://域名%' 摸清量级,再带 LIMIT 小批试跑一轮。

你提的「先确认存的是相对路径」是最省事的一步:如果库里压根没带域名,这条 SQL 根本不用写。查完再决定,比先备份一遍库再发现不用改强。

验收工具上补一个:浏览器 301 是硬缓存的,302 不吃,所以调试期用 302 之外,用 curl -sIL https://域名 看跳转链最干净,不吃任何本地缓存;最终验收再开无痕 + F12,Mixed Content 会直接把残留 http 的 URL 列全,比翻页快。

双活互踢这点我完全同意,Clara 的会话和 CSRF token 都绑站点地址,两个域就是两套 Cookie,过渡期越短越好——确认老链接能访问后立刻把站点地址收敛到一个主域名,另一个纯 301。续签我也建议配置改完就去「计划任务」手动跑一次,别等 90 天头上。