互联网教程

HTTP 怎么强制跳 HTTPS

证书装好不等于用户就走 HTTPS:老链接、外链、用户手输都可能进 http。一条 301 规则把 80 端口的请求全部转到 443。

发布者:黔序科技依据官方文档核验:2026 年 10 月

核心结论

  • 用 301 而不是 302,让搜索引擎更新索引
  • 跳转要保留路径与参数
  • 配 HSTS 后浏览器会强制走 HTTPS

一句话:标准做法:80 端口的 server 块里写一条 return 301 https://$host$request_uri,一条规则覆盖所有路径与参数。

nginx 配置

  1. 单独建 80 的 server 块不要和 443 混在一起,逻辑最清晰。
  2. 写跳转规则return 301 https://$host$request_uri;,用 $request_uri 保留完整路径与查询参数。
  3. 保留证书验证路径如果要做文件验证,把 /.well-known/acme-challenge/ 放行到本地目录。
  4. 检查并重载nginx -t && nginx -s reload。
  5. 验证用 curl -I http://域名/任意路径?x=1 看是否返回 301 且 Location 正确。
HTTP 到 HTTPS 的跳转与证书验证链路
一条 301 规则覆盖所有路径,别按页面逐条配

301 与 302 的区别

301 是永久跳转,搜索引擎会把权重与索引转到新地址;302 是临时跳转,旧地址的索引仍保留。切 HTTPS释 是永久变更,必须用 301,否则 http 页面会长期留在索引里。

注意:不要用前端释 JS 做跳转。JS 跳转对搜索引擎不友好、首屏会闪一下、而且在弱网下容易失败。服务端 301 是唯一正确做法。

HSTS:让浏览器记住

加 Strict-Transport-Security: max-age=31536000; includeSubDomains 响应头后,浏览器在有效期内对该域名释只用 HTTPS 访问,连第一次的 http 请求都不发。注意 includeSubDomains 会覆盖所有子域,确认每个子域都有证书再加。

常见错误

  • 跳转后变成首页:用了 return 301 https://域名; 丢掉了路径。
  • 死循环:反代后面还有一层,$host 与实际域名不一致,来回跳。
  • 混合内容:页面是 https,但图片、JS 仍用 http,浏览器显示「不安全」。

资料来源

  • RFC 6797:HTTP Strict Transport Security 规范。
  • nginx 文档:return 指令与 $request_uri 变量。
  • Google 搜索中心《HTTPS 作为排名信号》说明。

常见问题

配了跳转,小程序还是报错?

小程序要求请求的域名本身支持 HTTPS,跳转不算。检查接口地址是否直接写成了 https,而不是 http 靠服务端跳转。

HSTS 能不能撤销?

可以去掉响应头,但已经缓存到浏览器里的策略在 max-age 到期前仍然生效。调试阶段先用较短的 max-age。

个别页面还需要 http 访问怎么办?

说明该页面引用了不支持 HTTPS 的第三方资源,应该换资源而不是保留 http。混用会让整页失去安全标识。

相关阅读