在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)  提交你的域名进行申请。