在 Debian + Nginx 环境下开启 HSTS(HTTP Strict Transport Security),配置非常简单,下面按步骤说明。
✅ 已启用 HTTPS(SSL 证书已配置)
✅ 使用 Nginx
✅ 域名已可通过 HTTPS 正常访问
如果你还没配置 SSL,可以先看:
nginx -t
systemctl status nginx
编辑你的 Nginx HTTPS 站点配置,例如:
/etc/nginx/sites-available/your-site
在 443 ssl 的 server 块中加入:
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/ssl/certs/example.com.crt;
ssl_certificate_key /etc/ssl/private/example.com.key;
# 开启 HSTS
add_header Strict-Transport-Security "max-age=31536000" always;
# 其他配置
root /var/www/html;
index index.html;
}
✅ max-age=31536000 表示 1 年(单位:秒)
如果你的站点有子域名(如 www.example.com、api.example.com):
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
如果打算加入 浏览器 HSTS Preload List(不可逆,谨慎):
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
⚠️ 注意:
preload 提交后 几乎无法撤销server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
nginx -t
systemctl reload nginx
打开:
https://example.com
控制台 → Network → 查看响应头:
Strict-Transport-Security: max-age=31536000
curl -I https://example.com
❌ 不要在 HTTP 站点上加 HSTS
❌ 不要设置过小的 max-age(建议 ≥ 6 个月)
✅ 使用 always 防止错误页面未返回 HSTS
✅ 确保证书有效,否则会直接无法访问
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
如果你愿意,可以把你的 Nginx 配置文件贴出来,我可以帮你检查是否配置正确、是否有安全风险。