2013-12-13 133 views
2

我使用eb init将PHP应用程序部署到AWS Elastic Beanstalk。Elastic Beanstalk负载均衡没有继承父实例

起初我使用单个实例导致控制台告诉我将来可以更改它。

我有我的应用程序将document_root设置为/ public。

它的工作很好,直到我把它变成负载平衡,自动缩放通过

AWS弹性魔豆控制台页。

如果我尝试访问我的环境url,如果我通过Elastic Load Balancing将其指向父实例(由单实例创建的第一个实例),我的应用程序将可用,但当它碰到其他实例时,我的应用程序将可用,但是 将收到

故宫

您没有权限访问/在此服务器上。

我认为其他实例没有得到document_root =/public的设置。

如何让其他实例克隆父实例,包括配置?

只是为了信息,

目前我有运行2个最小实例,并会自动规模。

现在,1个实例正在工作,另外1个正在失败。

回答

3

看来,当您将环境类型从“单实例”更改为“负载平衡”时,新实例会继承另一个EC2安全组,从而将端口80仅限于负载平衡器实例。

如“Configuring Elastic Load Balancing with AWS Elastic Beanstalk”指南所述,如果您想直接从Web浏览器访问实例,则需要更新EC2安全组。

如果要部署使用nonlegacy容器类型, 一个应用程序,你要直接访问使用Web浏览器的EC2实例 您的应用程序,修改您的EC2安全 组的HTTP规则。有关说明,请转至Amazon EC2 Security Groups

希望它有帮助。

+0

嗨,感谢您的帮助, 但在我的情况下,我能够击中其他实例,这意味着ELB连接到其他实例,Forbidden的错误也发生在之前,因为我没有指定我的document_root当我使用单个实例时,在改变配置以将document_root指向/ public之前,框架需要运行它的工作。 从我的安全组中,只有ELB和RDS安全组才可用。 如果ELB是原因,我想我甚至无法访问EC,因为它未在ELB中配置。 – bluehyppo23

+0

@ bluehyppo23我有点困惑,当你说“击中其他实例”时,它是指直接(SSH,HTTP)还是通过ELB(HTTP)?关于“父”实例:当您将环境从单实例更改为负载平衡时,所谓的“父”实例不复存在,“父”中所做的所有更改都将消失。新的EC2实例被实例化,并且你的应用程序被部署在它们中的每一个上。它们将是相同的,除了'is_leader'标志值。除非你使用你没有提到的快照,所以我认为你没有。 – kukido

+0

它通过ELB,因为我使用Beanstalk给出的URL访问它们。也许正确的术语是领导者实例,根据我的理解,在负载平衡中,必须有1个领导者实例正确吗?如果我访问Beanstalk给出的URL,有时应用程序会运行,如果我打开新的浏览器(隐身模式),如果它立即(而不是第一个)转到其他浏览器,它会给予禁止访问。 有没有一种方法可以在负载均衡中测试2分钟的实例,并测试两个实例是否正在工作,因为我现在无法知道该页面是在哪些实例上提供的。 – bluehyppo23