You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx配置HTTP转HTTPS及HSTS预加载失败求助(AWS ELB场景)

我之前在ELB+Nginx的环境里折腾过HSTS配置,刚好能解决你的问题!你的核心问题是只配置了HTTP到HTTPS的重定向,但没有在HTTPS响应里添加HSTS头——毕竟HSTS规则是要通过HTTPS返回给浏览器的,光有重定向没用。

正确的Nginx配置方案

修改你的/etc/nginx/conf.d/default.conf为以下内容,适配ELB的SSL终止场景:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name My_domain;

    # 1. 把ELB转发过来的原HTTP请求重定向到HTTPS
    if ($http_x_forwarded_proto = "http") {
        return 301 https://$server_name$request_uri;
    }

    # 2. 给ELB转发过来的HTTPS请求添加HSTS头
    # always参数确保错误响应(如404/500)也带HSTS头,是测试通过的关键
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;

    # 这里放你的业务配置(比如静态文件路径、反向代理规则等)
    root /usr/share/nginx/html;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}

关键配置解释

  • 为什么用$http_x_forwarded_proto?因为你的SSL证书在ELB上,Nginx收到的所有请求都是HTTP协议,必须通过ELB传递的这个头来判断用户原请求是HTTP还是HTTPS。
  • HSTS参数细节:
    • max-age=63072000:让浏览器缓存HSTS规则1年(预加载测试要求至少180天)
    • includeSubDomains:将HSTS规则应用到所有子域名(如果不需要可以去掉,但预加载建议保留)
    • preload:提交到HSTS预加载列表的必要标记
    • always:确保所有响应(包括错误页)都携带HSTS头,避免测试工具抓不到

后续操作步骤

  1. 验证配置合法性:sudo nginx -t
  2. 重启Nginx生效:sudo systemctl restart nginx
  3. 再次去HSTS预加载站点测试,就能正常检测到HSTS头了

注意:一旦开启preload并提交到预加载列表,后续取消会非常麻烦(浏览器缓存+预加载列表同步延迟),请确认你的域名及所有子域名都能稳定支持HTTPS后再操作。

内容的提问来源于stack exchange,提问作者southouse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:26:45