【问题标题】:EC2 Ubuntu NGINX config HTTPS Redirect giving me error: ERR_TOO_MANY_REDIRECTSEC2 Ubuntu NGINX 配置 HTTPS 重定向给我错误:ERR_TOO_MANY_REDIRECTS
【发布时间】:2021-04-08 15:06:06
【问题描述】:

背景

我有一台在 AWS EC2 实例(Node/Express 应用程序)上运行的 Ubuntu 机器,其 SSL 证书设置使用证书管理器和负载均衡器。这适用于直接使用 https 访问我的网站,例如 https://example.com。但是,使用http 会导致连接不安全。

检查whynopadlock.com,我被告知我的网络服务器没有强制使用HTTPS。我的 Web 服务器设置为使用 NGINX 作为我的 EC2 实例的私有 IP 的反向代理。我四处寻找,似乎找不到像我这样合适的例子,尽管我试图拼凑我能找到的东西。

当我尝试设置强制 HTTPS 重定向时,我得到ERR_TOO_MANY_REDIRECTS

之前:原始 Nginx 配置

server {
    listen 80;
    location / {
        proxy_pass http://{{MASKED_EC2_INSTANCE_PRIVATE_IP_FOR_POST}}:8000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

注意:此配置允许 https://example.com 正常加载,但是如果使用 http://example.com 导航到站点并导致不安全的连接,则没有重定向。

之后:添加 HTTPS 重定向后的 NGINX 配置

# HTTP
server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  localhost;
    return 301   https://$host$request_uri;
}

# HTTPS
server {
    listen       443 default_server;
    listen       [::]:443 default_server;
    server_name  localhost;

    location / {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
        proxy_pass https://{{MASKED_EC2_INSTANCE_PRIVATE_IP_FOR_POST}}:8000;
        proxy_set_header X-Forwarded-Proto https;
    }
}

问题

我现在看到,当我使用 http 加载域时,我被成功重定向到 https,但是我收到了错误 ERR_TOO_MANY_REDIRECTS

谁能帮助我了解我的配置中缺少什么或可能做错了什么?

【问题讨论】:

  • 如果你有ALB,为什么用nginx做https?
  • @Marcin 什么是 ALB?我试图在 nginx 中设置重定向,因为我使用反向代理作为我的 EC2 节点应用程序之间的层。我想也许在 nginx 中做重定向比在快递方面更有意义?如果您有建议,很想知道一个更简单或更好的方法!感谢您花时间回答我的问题! ??????????
  • 您编写了“证书管理器和负载均衡器”。因此我假设您使用的是 AWS 负载均衡器?
  • @Marcin — 抱歉,我现在明白了!是的,我正在使用 ALB。有没有办法通过 ALB 强制 https / https 重定向?您现在是正确的,我使用证书管理器创建 SSL 证书,然后使用它设置 ALB。然后,我还使用 Route 53 将我的域指向 AWS DNS,并创建了一条 A 记录来指向我的负载均衡器。证书正在运行,但我的问题的根源是想知道如何强制任何 http 域请求使用 https。再次感谢您的回复!

标签: node.js express ubuntu amazon-ec2 nginx-reverse-proxy


【解决方案1】:

由于您使用的是 ALB,因此您可以在 ALB 上将 http 重定向到 https。 AWS 提供了如何设置的指南:

How can I redirect HTTP requests to HTTPS using an Application Load Balancer?

该过程涉及创建 http 侦听器并向其添加重定向操作,而不是常规的转发规则。这样您就不必对实例执行任何更改,因为所有这些都由 ALB 负责。

此外,由于您使用的是 AWS Certificate Manager,因此您必须使用 ALB,因为 ACM SSL 证书不能在实例上使用。 ACM 只能用于负载均衡器(ALB、CLB 或 NLB)、CloudFront 发行版或 API 网关。

【讨论】:

    猜你喜欢
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 2012-06-30
    相关资源
    最近更新 更多