我有以下情况: 我有1个Rails应用程序,它有2个域,每个域都有多个/动态子域。 此应用程序在AWS中使用负载平衡的Elastic Beanstalk。
我需要的是那些指向我的单个Rails应用程序的2个域在端口443中的SSL下工作。
但是由于Elastic Beanstalk只有一个负载均衡器,我只能在端口433上使用一个SSL证书:( 使用UCC SSL证书不是解决方案,因为我需要每个域证书都是通配符,因此动态子域也可以工作。
有关如何让多个Load Balancers与Elastic Beanstalk环境很好地协作的任何想法?
最佳。
答案 0 :(得分:23)
要将多个Elastic Load Balancers(ELB)添加到Elastic Beanstalk(EB)应用程序,您需要将其他ELB添加到EB应用程序的自动缩放组。
实现这一目标的最简单方法是通过AWS CLI(https://aws.amazon.com/cli/):
aws autoscaling attach-load-balancers --auto-scaling-group-name <SG_NAME> --load-balancer-names <ELB_NAME>
当然,这也可以在AWS控制台中完成:
答案 1 :(得分:6)
使用Elastic Beanstalk是一个艰难的选择,因为他们有一个cookie切割方式来部署你的应用程序,如果它不在他们的选项中,那么你要么“破解它”,要么只是使用EC2或纯云服务器使用完全不同的解决方案。
您可以尝试的另一件事是使用第二个域(和子域)的证书创建另一个ELB,并将其指向您的Elastic Beanstalk实例。如果你去ELB控制台,你应该能够看到第一个域的ELB。然后,您可以根据第一个域创建第二个域。
希望它有所帮助。
答案 2 :(得分:0)
我认为针对您的问题的最佳解决方案是在同一SSL证书上拥有多个域,然后将该证书分配给您的ELB环境。
(您可以使用通配符,也许在提出问题时尚未提供通配符)
您不需要额外的负载均衡器。
答案 3 :(得分:0)
这对我有用,
首先,创建负载均衡器
aws elb create-load-balancer --load-balancer-name my-load-balancer --listeners "Protocol=HTTP,LoadBalancerPort=80,InstanceProtocol=HTTP,InstancePort=80" "Protocol=HTTPS,LoadBalancerPort=443,InstanceProtocol=HTTP,InstancePort=80,SSLCertificateId=arn-of-certificate" --subnets eb-subnet-of-primary-elb --security-groups sg-of-primary-elb
然后,将负载均衡器附加到EB env的主要自动缩放组
aws autoscaling attach-load-balancers --auto-scaling-group-name asg-name-of-primary-asg-in-eb --load-balancer-names my-load-balancer
答案 4 :(得分:0)
需要注意的另一件事是,EBS创建的实例需要允许您的自定义ELB与它们通信。
您需要在EBS自动创建的安全组(包含说明SecurityGroup for ElasticBeanstalk environment
)中创建INBOUND规则,以允许TCP:80访问。我将自定义ELB放在不同的安全组中,因此我将sg - **** ID指定为源。