一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

如何在 Apache 中配置 HSTS 以强制浏览器使用 HTTPS

时间:2026-07-01 10:47:51 编辑:袖梨 来源:一聚教程网

HSTS本质是浏览器端强制HTTPS访问机制,不替代HTTP重定向,仅在HTTPS虚拟主机中通过Header指令配置;需先确保SSL证书有效、mod_ssl与mod_headers已启用,并验证HTTPS响应正常后方可添加。

在 Apache 中配置 HSTS,本质是让浏览器“记住”只用 HTTPS 访问你的域名,而不是靠服务端跳转。它不替代 HTTP 重定向,而是补上首次跳转后的安全缺口——一旦生效,连你在地址栏输 http:// 都会自动变成 https://

确认基础条件已满足

三件事缺一不可,否则 HSTS 头根本发不出去:

  • 站点已部署有效、受信的 SSL 证书(Let’s Encrypt 等均可),且 443 端口的 HTTPS 虚拟主机能正常响应
  • Apache 已启用 mod_sslmod_headers 模块:运行 apachectl -M | grep -E "(ssl|headers)",应看到两行输出;若无,需在主配置中取消注释或添加:
    LoadModule ssl_module modules/mod_ssl.so
    LoadModule headers_module modules/mod_headers.so
  • 先用 curl -I https://yourdomain.com 确认 HTTPS 响应能返回,再加 HSTS

只在 HTTPS 虚拟主机中添加响应头

HSTS 只对加密连接生效,必须写在 <VirtualHost *:443> 块内,绝不能 放在 80 端口配置里:

  • 推荐起始配置(便于验证和回滚):
    Header always set Strict-Transport-Security "max-age=300; includeSubDomains"
  • max-age=300 表示仅缓存 5 分钟,适合上线初期测试
  • preload —— 误提交预加载列表后无法撤回,需全站稳定 HTTPS 至少 30 天后再考虑
  • includeSubDomains,后续补上

配套做好 HTTP 到 HTTPS 的 301 重定向

HSTS 不管第一次访问,所以 80 端口仍需兜底跳转:

  • <VirtualHost *:80> 块中添加:
    Redirect permanent / https://yourdomain.com/(替换为实际域名)
  • 确保该配置生效:访问 http://yourdomain.com 应返回 301 Moved Permanently 并跳转到 HTTPS
  • 不要在 HTTP 主机里加任何 Header 指令,无效且干扰调试

验证是否真正生效

重启前执行 apachectl configtest 检查语法;重启后务必实测:

  • 命令行验证:curl -I https://yourdomain.com,确认响应头含:
    Strict-Transport-Security: max-age=300; includeSubDomains
  • 浏览器验证:用 Chrome 或 Firefox 打开 DevTools → Network → 刷新 HTTPS 页面,查看响应头
  • 行为验证:在地址栏输入 http://yourdomain.com,若直接跳转(开发者工具 Network 中显示 307 Internal Redirect),说明 HSTS 已被浏览器接收并启用
  • 稳定运行数天无异常后,再逐步延长 max-age:300 → 86400 → 2592000 → 31536000(1年)

热门栏目