Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 当AWS应用程序负载平衡器给出504,而其背后的EC2实例给出200时,如何对其进行故障排除?_Amazon Web Services_Networking_Amazon Ec2_Elastic Load Balancer - Fatal编程技术网

Amazon web services 当AWS应用程序负载平衡器给出504,而其背后的EC2实例给出200时,如何对其进行故障排除?

Amazon web services 当AWS应用程序负载平衡器给出504,而其背后的EC2实例给出200时,如何对其进行故障排除?,amazon-web-services,networking,amazon-ec2,elastic-load-balancer,Amazon Web Services,Networking,Amazon Ec2,Elastic Load Balancer,我有一个EC2实例,其中成功部署了几个应用程序,监听端口3000/3001/3002上的连接。我可以通过连接到给定端口上的公共DNS或公共IP来正确加载网页。也就是说,curl http://:3000有效。因此,我知道应用程序正在运行,并且我知道端口绑定/防火墙规则/EC2安全组都已正确设置,以接收来自外部世界的连接 我还有一个应用程序负载均衡器,它应该根据主机名将流量路由到3个应用程序,但它总是给我“504网关超时”。我已经检查了所有的设置,但我看不出有什么问题,我也不确定如何从这里排除故障

我有一个EC2实例,其中成功部署了几个应用程序,监听端口3000/3001/3002上的连接。我可以通过连接到给定端口上的公共DNS或公共IP来正确加载网页。也就是说,
curl http://:3000
有效。因此,我知道应用程序正在运行,并且我知道端口绑定/防火墙规则/EC2安全组都已正确设置,以接收来自外部世界的连接

我还有一个应用程序负载均衡器,它应该根据主机名将流量路由到3个应用程序,但它总是给我“504网关超时”。我已经检查了所有的设置,但我看不出有什么问题,我也不确定如何从这里排除故障

  • ALB有一个HTTPS/443侦听器,其证书对
    mydomain.com
    app1.mydomain.com
    app2.mydomain.com
    app2.mydomain.com
    有效
  • 侦听器有3个规则,外加默认规则:
  • 主机==
    app1.mydomain.com
    =>
    app1目标组
  • 主机==
    app2.mydomain.com
    =>
    app2目标组
  • 主机==
    app3.mydomain.com
    =>
    app3目标组
  • 默认操作(最后手段)=>
    默认目标群体
  • 每个目标组仅包含一个通过HTTP的EC2实例,具有以下端口:
  • app1目标群体
    :3000
  • app2目标群体
    :3001
  • app3目标群体
    :3002
  • 默认目标组
    :3000
鉴于我可以直接访问该应用程序,我确信我配置ALB/侦听器/目标组的方式一定有问题。但是504没有给我太多的支持

我试图打开S3存储桶的访问日志,但它似乎没有在那里写任何东西。有一个名为
ELBAccessLogTestFile
的对象,bucket中没有实际的日志

编辑:更多信息。。。实际上,我已经在EC2实例上安装了nginx,这是我之前进行SSL终止和主机名到端口映射/路由的地方。如果我将上面的
默认目标组
更改为通过HTTPS指向端口443,那么它可以工作

所以出于某种原因,路由流量 -通过端口443上的HTTPS从ALB到EC2实例->确定! -通过端口3000上的HTTP从ALB到EC2实例->断开


但同样,我可以从笔记本电脑上直接在HTTP/3000上点击该实例。

默认情况下,同一安全组中的资源之间的通信不会打开。仅安全组成员身份不提供特殊访问。您仍然需要打开安全组中的端口,以允许安全组中的其他资源访问这些端口。如果不想在安全组中的资源之外打开安全组,可以在规则的源字段中指定安全组ID。

可以发布EC2实例的安全组设置吗?仅因为它可以通过Internet连接访问,并不一定意味着它可以从负载平衡器访问,负载平衡器将建立内部VPC网络连接。目前,ALB和EC2实例位于同一个安全组中,该安全组具有端口22、80、443和2376的入口,以及端口80、443和53的出口,都在0.0.0.0/0上。我确实尝试过在3000上临时添加入口,纯粹是为了从我的笔记本电脑上进行测试。不过,我假设只要ALB->EC2通信在同一个安全组中,就不需要3000个入口。这不对吗?即使有3000个入口,ALB仍然会给出504个入口。在同一个安全组中是完全不相关的(不建议这样做)。这根本不授予任何特殊访问权限。您需要在安全组中打开端口3000。如果你不想让它向公众开放,那么在源代码字段中使用安全组ID。是的,我不想把它们放在同一个安全组中,这只是我改变事情时的一种过渡状态。我想我知道为什么它现在起作用了。我在测试时添加了入口3000,允许从我的笔记本电脑访问,但我没有添加出口300,我猜这意味着ALB无法在3000上离开,甚至无法在3000上访问同一组中的内容。我现在就试试。你为什么要定义出口规则?默认情况下,出口是完全开放的,以便允许服务器建立其所需的出站连接,以响应请求以及下载服务器更新等。