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

如何在AWS Lightsail中强制仅用HTTPS?解决重定向循环问题

解决AWS Lightsail负载均衡下Nginx的HTTPS重定向循环问题

好问题!你碰到的ERR_TOO_MANY_REDIRECTS确实是Lightsail负载均衡的典型场景——因为负载均衡已经帮你完成了HTTPS终止(在负载均衡层面处理SSL证书),然后所有流量都会以HTTP协议(80端口)转发到你的EC2实例。这就导致Nginx里的$scheme变量永远是http,你的重定向规则会一直把请求往HTTPS推,自然就陷入循环了。

怎么获取原始请求的协议?

Lightsail负载均衡会自动把用户实际发起请求的协议(http或https)放在X-Forwarded-Proto请求头里,传给后端的Nginx。你只需要基于这个头来判断是否需要重定向,而不是用$scheme。

修改后的Nginx配置

把你原来的重定向规则替换成基于X-Forwarded-Proto的判断,同时调整proxy_set_header里的X-Forwarded-Proto值,确保后端服务也能拿到原始协议:

server {
    listen 80;
    server_name mountainviewwebtech.ca www.mountainviewwebtech.ca;

    # 基于负载均衡传来的原始协议做重定向
    if ($http_x_forwarded_proto != 'https') {
        return 301 https://$host$request_uri;
    }

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # 把负载均衡传来的原始协议传给后端服务
        proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
    }
}

为什么这样能解决问题?

  • 当用户用HTTPS访问时,负载均衡会在请求头里带上X-Forwarded-Proto: https,Nginx判断后不会触发重定向;
  • 当用户用HTTP访问时,负载均衡会带上X-Forwarded-Proto: http,Nginx就会把请求重定向到HTTPS版本,不会出现循环;
  • 调整后的proxy_set_header X-Forwarded-Proto能让你后端的3000端口服务也知道用户实际用的是哪种协议,避免后续逻辑出错。

另外,确认一下你的Lightsail负载均衡已经正确配置了443端口的HTTPS监听器并关联了证书,这部分你已经完成了,所以不需要额外调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:33:07