Node.js 和 Docker - Elastic Beanstalk 502 错误网关

Posted

技术标签:

【中文标题】Node.js 和 Docker - Elastic Beanstalk 502 错误网关【英文标题】:Node.js and Docker- Elastic Beanstalk 502 Bad Gateway 【发布时间】:2019-07-07 17:49:04 【问题描述】: 我在 AWS Elastic Beanstalk 上部署了 docker - 我有一个 Node.js Web 应用程序,我需要它在 https 上运行。 单击弹性 beanstalk 控制台中的链接时,我从 nginx/1.12.1 收到 502 Bad Gateway。 我能够在实例级别访问应用程序。 我已尝试为 TCP 直通 (https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/https-tcp-passthrough.html) 配置负载均衡器,只是为了检查应用程序是否会运行,但这没有帮助。 接下来我尝试在负载平衡的 Elastic Beanstalk 环境 (https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/configuring-https-endtoend.html) 中配置端到端加密,但仍然遇到相同的错误。 我的 sso 应用需要端到端 https。 以下是我在 .ebextensions for https 中使用的设置
sslSecurityGroupIngress: 
  Type: AWS::EC2::SecurityGroupIngress
  Properties:
    GroupId: "Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]
    IpProtocol: tcp
    ToPort: 443
    FromPort: 443
    CidrIp: 0.0.0.0/0

在 Nginx 中我已经增加了 proxy_connect_timeout 和 proxy_read_timeout

【问题讨论】:

如何access the app at the instance level?再次检查端口,如果节点在实例上的端口 443 上运行,而不是在容器中。 502是最服务器端错误, 使用 EC2 实例控制台中的公共 dns 链接 @AbdullahFarooq,您找到解决方案了吗?我遇到了同样的问题,似乎没有人知道答案,因为我的帖子也没有得到答复。 【参考方案1】:

我能够看到我的应用程序被配置为在端口 80 和 443 上侦听,尽管规则仅重定向实例的端口 80,即使请求来自 https 协议。如果您想配置端到端 https,则需要一个重定向到实例端口 443 的规则。

以前我的 Elastic Beanstalk 配置设置如下:

Listener      Rules         Process

443             443            default
80              80             default 

“默认”进程通过实例的端口 80 重定向所有连接。

我更新了我的 ElasticBeanstalk 环境以将 https 请求转发到实例的端口 443?下面是如何将规则与流程关联的示例:

======== .ebextensions/https-reencrypt-alb.config ========
option_settings:
  aws:elbv2:listener:443:
    DefaultProcess: https
    ListenerEnabled: 'true'
    Protocol: HTTPS
  aws:elasticbeanstalk:environment:process:https:
    Port: '443'
    Protocol: HTTPS
======== .ebextensions/https-reencrypt-alb.config ========

可能导致此问题的一种情况可能与您的应用程序仅侦听 443 端口有关,一旦实例上没有针对此端口的 ALB 重定向规则,访问失败并出现以下情况是合理的错误的网关请求。

为 http 到 https 重定向添加这个:

============= http-to-https.config ===============
Resources:
  AWSEBV2LoadBalancerListener:
    Type: AWS::ElasticLoadBalancingV2::Listener
    Properties:
      DefaultActions:
        - Type: redirect
          RedirectConfig:
            Protocol: HTTPS
            Port: 443
            StatusCode: 'HTTP_301'
      LoadBalancerArn:
        Ref: AWSEBV2LoadBalancer
      Port: 80
      Protocol: HTTP
============= http-to-https.config ===============

【讨论】:

以上是关于Node.js 和 Docker - Elastic Beanstalk 502 错误网关的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 和 Docker - Elastic Beanstalk 502 错误网关

Node.js自动导航模式在Docker的应用

Docker常见仓库Node.js

Docker快速搭建Node.js Express运行环境

Docker快速搭建Node.js Express运行环境

Docker快速搭建Node.js Express运行环境