点开「强制HTTPS」开关前需确认三件事:SSL证书已正确部署且域名完全匹配、80端口正常监听、未被CDN或防火墙拦截;curl -I验证返回301且Location指向HTTPS;CDN需单独配置HTTPS及回源协议为HTTP。

点开「强制HTTPS」开关就完事了?先确认这三件事
宝塔面板里点一下「强制HTTPS」确实能生效,但前提是:SSL证书已正确部署、80端口正常监听、没被CDN或防火墙拦截。很多人点了保存却没跳转,问题往往出在前置环节。
-
SSL选项卡里状态必须是「已启用」,且证书域名完全匹配(比如访问www.example.com,证书就得包含这个完整域名,不能只填example.com) - 终端执行
curl -I http://your-domain.com,返回码要是301 Moved Permanently,且Location头指向https://地址——这是唯一可信的验证方式 - 如果开了 CDN(如腾讯云 CDN、Cloudflare),CDN 层也要单独开启 HTTPS,并把「回源协议」设为 HTTP,否则会因双重加密导致超时或 502
Nginx 配置文件里没看到 return 301?那是宝塔自动藏起来了
你去网站的「配置文件」选项卡翻半天,可能找不到显式的 return 301 规则——因为宝塔默认不把重定向逻辑写进主配置,而是通过 include 引入一个独立的重定向文件(路径类似 /www/server/panel/vhost/rewrite/xxx.conf)。它本质还是靠 Nginx 的 return 301 https://$host$request_uri; 实现,只是封装了一层。
- 如果你需要排除某些路径(比如健康检查接口
/healthz不跳转),就不能依赖面板开关,得手动改配置,在server块里加if ($request_uri !~ ^/healthz) { return 301 https://$host$request_uri; } - 别在
location /api这类代理块里套用全局跳转逻辑,否则后端服务可能收不到原始请求头 - 修改后务必点「重载配置」,而不是只点保存——Nginx 不会自动 reload
HTTP 能打开但 HTTPS 打不开?大概率是证书没覆盖所有访问入口
浏览器地址栏显示“不安全”或直接拒绝连接,90% 是证书域名不匹配。不是“有证书”就行,而是“证书里的 Subject Alternative Name(SAN)列表”必须穷举所有实际被访问的域名形式。
- 用户输
example.com和www.example.com是两个不同域名,申请 Let’s Encrypt 证书时必须同时勾选这两个;阿里云/腾讯云下载的证书包里,.crt文件要包含全部 SAN 条目,不能只复制其中一段 - 泛域名证书(
*.example.com)不会自动包含根域名example.com,必须额外添加一条,否则访问裸域仍报错 - 证书文件上传后,检查面板里是否提示「证书链不完整」——常见于只传了
.crt没传中间证书(bundle),或把.pem和.crt混用了
开了 HTTPS,Vue/React 刷新 404?这不是 HTTPS 的问题
首页能打开、点路由能跳转,但一刷新就 404,说明 Nginx 没配 SPA 的 history fallback,和 HTTPS 本身无关。强制跳转和前端路由是两套逻辑,不能互相掩盖。
- 进网站「配置文件」,找到
location /块,把默认的index index.html;替换成try_files $uri $uri/ /index.html;(注意分号不能漏,也不能多斜杠) - 这条规则不能放在
location /api或其他代理块里,否则会干扰反向代理行为 - 如果用了 CDN,CDN 缓存策略要关掉 HTML 文件的缓存,否则用户可能刷到旧的 404 页面
curl -I 的响应头。

















