全站强制HTTPS需两步:一是Nginx用return 301或Apache用RewriteRule将80端口HTTP请求永久重定向至HTTPS,二是HTTPS响应头中添加HSTS策略(max-age=31536000; includeSubDomains; preload)并修复混合内容。

要让全站强制走 HTTPS,核心是两步:让浏览器只通过加密连接访问你的网站,同时确保服务器不再响应 HTTP 请求(或自动跳转)。这能有效防止登录凭证、Cookie、表单数据等被中间人窃听或篡改。
配置 Web 服务器强制跳转 HTTPS
在 Nginx 或 Apache 上设置 301 永久重定向,把所有 HTTP 请求转向对应 HTTPS 地址。
-
Nginx:在 server 块中监听 80 端口,添加
return 301 https://$host$request_uri; -
Apache:启用 mod_rewrite,在 .htaccess 或虚拟主机配置里写入
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] - 务必确认 443 端口已正确配置 SSL 证书(如 Let’s Encrypt 的 cert.pem + privkey.pem),且证书链完整
启用 HSTS(HTTP Strict Transport Security)
HSTS 告诉浏览器“未来一段时间内,只允许用 HTTPS 访问这个域名”,连首次 HTTP 请求都可避免——这是防降级攻击的关键。
- 在 HTTPS 响应头中加入:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload -
max-age=31536000表示一年,足够长但不宜设为永久;includeSubDomains覆盖所有子域;preload是可选,用于提交到浏览器预加载列表 - 首次部署建议先用较短 max-age(如 300 秒)测试,确认无误再延长
检查并清理混合内容(Mixed Content)
即使页面走 HTTPS,若其中加载了 HTTP 资源(如图片、JS、CSS、iframe),浏览器会拦截或降级警告,导致功能异常或安全策略失效。
- 用浏览器开发者工具的 Console 和 Network 标签页查找 “Mixed Content” 报错
- 将所有资源 URL 改为相对协议(
//example.com/js/app.js)或直接使用 HTTPS 协议前缀 - 后端模板中避免硬编码 http://,统一用协议无关 URL 或环境变量控制
更新外部引用与第三方服务
微信回调地址、支付网关通知 URL、CDN 配置、SEO 工具验证文件位置等,凡涉及你域名的地方,都要同步切换成 HTTPS 版本。
- 检查 Google Search Console、百度站长平台是否已添加并验证 HTTPS 版站点
- 确认 API 接口调用方(如 App、小程序)使用的域名已是 HTTPS,否则请求会被系统拒绝
- 邮件中的链接、旧版二维码、纸质宣传物料上的网址,也需逐步替换,降低用户手动输入 HTTP 的概率


















