尝试通过 NGINX 强制我的单页应用程序使用 HTTPS 时,AWS ELB 健康检查失败

尝试通过 NGINX 强制我的单页应用程序使用 HTTPS 时,AWS ELB 健康检查失败

我正在尝试使用 NGINX 在我的 http 端点上强制使用 https,如下所示:

server {
    location / {
        root /data/www;
        if ($http_x_forwarded_proto != 'https') {
            rewrite ^ https://$host$request_uri? permanent;
        }
    }
    location /images/ {
        root /data;
    }
}

请注意,我从 nginx 提供的都是静态文件(HTML 文件、javascript 文件和几个

我的 ELB 健康检查命中 HTTP:80/。所以我认为它正在发生,ELB 尝试 ping 我的服务器,命中重写,并返回 301?我见过很多关于 ruby​​ 和 node 的答案,但这只是静态资产。救命!

答案1

是的,ELB 将通过其 IP 访问您的服务器(从而获得默认server块),并且除 2xx 请求之外的任何请求都将被视为失败处理。

我们使用默认的服务器块来让 ELB 进行 ping:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    location = /status {
      return 200;
      access_log off;
    }
}

答案2

我最终做的是再次进行健康检查 TCP:80 而不是 HTTP:80

相关内容