在Nginx中配置HSTS非常简单,核心就是使用 `add_header` 指令添加一个特定的响应头。
下面是标准的配置方法:
一、核心配置:在HTTPS的server块中添加指令
你需要编辑网站的Nginx配置文件(通常位于 `/etc/nginx/nginx.conf`、`/etc/nginx/conf.d/` 或 `/etc/nginx/sites-available/` 目录下)。
在监听 443 端口 的 `server` 块中,添加如下一行配置:
```nginx
server {
listen 443 ssl;
server_name yourdomain.com;
# SSL证书配置等...
ssl_certificate /path/to/your/cert.pem;
ssl_certificate_key /path/to/your/privkey.pem;
# 核心HSTS配置
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
# 其他配置...
}
```
二、参数详解
这条指令配置了几个关键参数:
`max-age=31536000`:必需。指定浏览器在多少秒内强制使用HTTPS访问你的网站。`31536000` 秒等于1年。
建议:测试阶段可设为 `300`(5分钟)或 `86400`(1天),确认无误后再调整为1年或更长(如 `63072000`,即2年)。
`includeSubDomains`:可选但推荐。此策略将对当前域名的所有子域名生效。
注意:启用前请确保所有子域名都已支持HTTPS,否则用户将无法通过HTTP访问它们。
`preload`:可选。允许你将域名提交到浏览器的HSTS预加载列表。一旦通过,浏览器会在第一次访问前就强制使用HTTPS,提供最高级别的安全保障。
要求:若要启用此参数,`max-age` 必须至少为 `31536000`(1年),且必须包含 `includeSubDomains` 参数。
`always`:强烈建议加上。确保无论服务器返回何种状态码(如404、500等),都会发送此响应头。
三、重要注意事项
1. 仅在HTTPS站点启用:务必只在443端口的HTTPS `server` 块中添加此配置。在HTTP的 `server` 块中添加会导致访问死循环。
2. 确保全站HTTPS:在启用HSTS,特别是 `includeSubDomains` 前,必须保证你的主站和所有子域名的HTTPS配置都正确无误。
3. 谨慎操作:HSTS策略会被浏览器长期缓存。一旦设置,在 `max-age` 过期前,用户无法通过HTTP访问你的网站。因此,务必备份配置文件并谨慎操作。
四、验证配置是否生效
配置完成后,可以通过以下方式验证:
1. 测试并重载Nginx:
```bash
sudo nginx -t # 测试配置文件语法
sudo systemctl reload nginx # 重载配置
```
2. 使用浏览器开发者工具:访问你的网站,在“网络”(Network)标签中查看任意请求的响应头(Response Headers),确认是否包含 `Strict-Transport-Security` 字段。
3. 使用命令行工具:
```bash
curl -I https://yourdomain.com
```
检查输出中是否包含 `Strict-Transport-Security` 头。
4. 在线检测工具:可使用 [SecurityHeaders.com](https://securityheaders.com) 或 [SSL Labs](https://www.ssllabs.com/ssltest/) 等网站进行扫描。
五、进阶:申请加入HSTS预加载列表
如果你希望将网站加入浏览器的HSTS预加载列表,以获得“开箱即用”的HTTPS强制效果,在完成上述配置(包含 `preload` 参数)后,可访问 [hstspreload.org](https://hstspreload.org) 提交你的域名进行申请。