可以将弹性负载平衡器前向端口443转移到端口443以获得弹性beanstalk实例吗?

时间:2012-10-10 04:46:55

标签: amazon-ec2 amazon-web-services elastic-beanstalk

我有一个Windows / .NET弹性beanstalk实例,在负载均衡器上设置了SSL证书。默认情况下,这会创建从https / 443转发到http / 80的端口。我想在负载均衡器上将443 / https转发到beanstalk实例上的443 https。

我正在尝试记录here:

我重新配置了相应的EC2实例EC2 - > Load Balancers - > Listeners,以便HTTPS转发到使用我的SSL证书配置的HTTPS,问题是当我尝试发出HTTPS请求之后它只是超时。看起来ElasticBeanstalk实例不喜欢我修改EC2监听器。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

要在LoadBalancer和Elastic beanstalk之间使用SSL,我需要做几件事:

  1. 配置EC2 LoadBalancer以将端口443转发到端口443(在SSL上)。我在上面的问题中已经有了这一部分。

  2. 在EC2实例上配置IIS,就像使用SSL的任何其他站点一样: 一个)。在IIS中的EC2实例上安装SSL证书。 B)。使用SSL证书添加https / 443绑定。

  3. 问题是我期待#2免费。在Windows Azure上,当您在实例上配置证书时,这几乎是免费的,但截至目前,AMZN ElasticBeanstalk for Windows的情况并非如此。

    我也希望#2可以编写脚本,这样我就可以扩展或缩小实例而无需手动执行#2。我正在寻找一些简单的方法来绑定我的EB实例上的power-shell脚本,但他们显然也没有这个功能。

    我的最终解决方案是创建一个自定义虚拟机映像(AMI),并安装了SSL证书,并添加了https绑定。如果我这样做,我可以使用已设置的SSL内容部署ElasticBeanstalk映像。这样做可以让我在没有任何配置的情况下向上或向下扩展。

答案 1 :(得分:0)

对于某些实例类型,您可以通过配置文件配置Elastic Beanstalk应用服务器。您可以使用此技术启用SSL。

请参阅Serve HTTPS From Elastic Beanstalk Application Instances,例如配置。

答案 2 :(得分:0)

对于我的ASP.NET MVC项目以及各种OAuth提供程序,这是一个特别的问题。基本上任何应该使用https的东西都在Elastic Beanstalk下被破坏了。我试着通过寻找X-Forwarded-Proto HTTP头来编码,但它非常讨厌。所以我真的希望SSL直接进入我的EC2实例。

我可能花了3个小时才弄清楚如何在不使用AMI的情况下做到这一点,所以希望这对某人有所帮助。

我之前尝试过自定义AMI方法,虽然它有效,但它提出了两个问题:

  1. 我必须修补和维护我自己的AMI,这很费时间。如果我使用标准图像,我可以在有更新的图像时重建环境。
  2. 我无法控制我的配置设置 - 它们只是嵌入在云端某处的不透明AMI中。
  3. 我从this post改编了这个。

    首先,您需要将一个目录添加到名为.ebextensions的Visual Studio Web项目的根目录中。

    在其中,创建一个名为environment.config的文本文件 - 我们将在这里使用YAML,因此如果它认为它是一个Application Config文件并添加了标签,请不要在Visual Studio中编辑它 - YAML是空白敏感。该文件的语法记录为on Amazon

    我的文件有许多用于调优IIS的其他设置,但相关位看起来像这样:

    container_commands:
      site_add_ssl_binding:
        command: PowerShell -ExecutionPolicy Bypass -File "C:\\inetpub\\wwwroot\\.ebextensions\\ssl.ps1"
    

    这将执行名为ssl.ps1的自定义PowerShell脚本。所以让我们在.ebextensions目录中创建它:

    # If there is no existing SSL binding
    if ( -not(Get-WebBinding "Default Web Site" -Port 443) ) {
    
        # Import the .pfx file into the certificate store
        $securepwd = ConvertTo-SecureString -String "YOUR_PFX_PASSWORD_HERE" -Force -AsPlainText
        $cert = Import-PfxCertificate -FilePath C:\inetpub\wwwroot\.ebextensions\my-certificate.pfx cert:\localMachine\my -Password $securepwd
    
        # Create site binding in IIS
        New-WebBinding -Name "Default Web Site" -IP "*" -Port 443 -Protocol https
        New-Item IIS:SslBindings\0.0.0.0!443 -value $cert
    }
    

    执行时,此命令会将.pfx文件导入证书存储区,然后在您网站的端口443上创建SSL绑定。

    使用我引用的原始代码,我有各种各样的问题与狡猾的字符编码。因此,如果您复制/粘贴此示例并且它不起作用,您可以通过远程访问EC2实例,打开命令提示符并直接执行命令来测试它:PowerShell -ExecutionPolicy Bypass -File "C:\inetpub\wwwroot\.ebextensions\ssl.ps1"

    您还需要将.pfx文件添加到.ebextensions目录中。在Visual Studio中,确保所有文件都包含在项目中,并具有内容构建操作(提示在解决方案资源管理器中选择文件并按F4)。解决方案资源管理器应该如下所示:

    • 网络project.csproj
      • .ebextensions
        • environment.config
        • MY-certificate.pfx
        • ssl.ps1
    • ...

    然后使用AWS Toolkit for Visual Studio,右键单击您的项目并选择Publish to AWS并按照提示操作。这会将您的部署包上传到您的Elastic Beanstalk环境并进行安装。您的自定义将在部署期间执行,或者在配置新的EC2实例时执行。

    成功执行后,.ebextensions目录将被删除。

    如果您不想在Visual Studio项目中包含.pfx文件,original example使用PowerShell从S3实例下载.pfx文件。您还可以通过引用Elastic Beanstalk环境变量来避免在.ps1中嵌入密码。

    为了让这个端到端工作,您还需要:

    1. 配置负载均衡器,将443流量转发到EC2实例上的端口443 - 默认切换到端口80.
    2. 从负载均衡器中配置安全组以允许443个流量。
    3. 将安全组配置为EC2实例以允许443个流量。