【问题标题】:Nginx as a reverse proxy behind AWS ALB (self-signed)Nginx 作为 AWS ALB 背后的反向代理(自签名)
【发布时间】:2020-06-30 08:40:11
【问题描述】:

我在 AWS 中创建了一个环境,其中包括一个安装了节点 js Web 服务器和 Nginx 的 EC2 实例,位于自签名应用程序负载均衡器后面。

我的 ALB 从 HTTPS (443) 获取请求并通过 HTTP (80) 将它们转发到 Nginx。我的 Nginx 应该从 ALB(在端口 80)获取请求并在端口 9090(由节点 js Web 服务器使用)上转发它们。

但是,我在将请求从 Nginx 转换到应用程序时遇到了问题。 在 HTTP 上使用 ALB DNS 输入 URL 时,我能够访问上述页面(而不是我的网络服务器应用程序页面):

上面附加的我的 default.conf 文件:

我所有的安全组都开放以测试问题(在 443、80、9090 上)。所以端口不是问题,而是 Nginx 配置。

另外,我上面介绍的目标群体:

可能是什么问题/我应该做哪些进一步的配置? 谢谢。

【问题讨论】:

  • 删除server_name localhost; 行。那应该可以解决它。
  • 不工作,同样的“Welcome to nginx”结果页面

标签: node.js amazon-web-services nginx nginx-reverse-proxy aws-alb


【解决方案1】:

当您拥有负载均衡器时,为什么要使用 Nginx?听起来您正在为一个 nodejs 应用程序使用两台 Nginx 服务器。 SSL 操作也会消耗额外的 CPU 资源。最占用 CPU 的操作是 SSL 握手。

terminating-ssl-http

处理此问题的正确方法也将解决您的上述问题。

  • 创建目标组并绑定实例端口9090
  • 生成certificate from AWS(免费)
  • 创建 HTTPS 侦听器并放置 aws 证书
  • 将我们在步骤 1 中创建的目标组添加到负载均衡器的 HTTPS 侦听器。

使用这种方法,您将在负载均衡器处终止 SSL/TLS,并且实例将收到纯 HTTP 连接,这将节省用于 SSL 加密/解密的 CPU 时间。

SSL 终止是指代理服务器或负载平衡器的术语,它们接受 SSL/TLS 连接,但在连接到后端服务器时不使用相同的连接。例如。暴露在互联网上的负载均衡器可能会在端口 443 上接受 HTTPS,但仅通过 HTTP 连接到后端服务器

出于测试目的,这应该可以工作。

server {
    listen                      80;
    server_name                 example.com;
    client_max_body_size        32M;
    underscores_in_headers  on;

    location / {
        proxy_set_header        Upgrade $http_upgrade;
        proxy_pass_header       device_id;
        proxy_set_header        Connection "upgrade";
        proxy_http_version      1.1;
        proxy_set_header        Host $host;
        proxy_read_timeout      120;
        proxy_next_upstream     error timeout invalid_header http_500;
        proxy_connect_timeout   90;
        proxy_pass              http://localhost:9090;
    }
}

【讨论】:

  • 看起来他已经在做这一切了,除了使用 ACM 生成的证书。
  • 我的意思是他根本不需要 Nginx,因为 TLS 终止是 CPU 密集型过程,而 LB 可以处理 ngin 在服务器级别可以做的所有事情。
  • 感谢您的回复。我已经有了您描述的环境,但是,我想部署 Nginx 并将其用作“第二磅”,仅用于我的私人实践。
  • 我明白了,然后将 server_name 更改为 default 或将其保留为空或更好地将其设置为您的 DNS server_name mydomain.com www.mydomain.com;
  • 成功了,同样的“欢迎使用 nginx”屏幕。
【解决方案2】:

工作。问题出在“/etc/nginx/nginx.conf”文件中。经过大量阅读和尝试 - 我发现在文件中它转发到 HTML(而不是我的 nodejs Web 服务器)。 更改“root /path_to_ws”的行,重新启动 Nginx 并且它工作。 感谢您的帮助!

【讨论】:

    猜你喜欢
    • 2018-05-10
    • 2020-03-07
    • 2021-09-05
    • 2019-03-14
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 2022-06-23
    相关资源
    最近更新 更多