最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何在 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_ssl和mod_headers模块:运行apachectl -M | grep -E "(ssl|headers)",应看到两行输出;若无,需在主配置中取消注释或添加:LoadModule ssl_module modules/mod_ssl.soLoadModule 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年)