aws 弹性负载均衡器可以将端口 443 转发到端口 443 以获取弹性 beantalk 实例吗?

Posted

技术标签:

【中文标题】aws 弹性负载均衡器可以将端口 443 转发到端口 443 以获取弹性 beantalk 实例吗?【英文标题】:Can aws elastic load balancer foward port 443 to port 443 for an elastic beanstalk instance? 【发布时间】:2012-09-30 11:56:04 【问题描述】:

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

我正在尝试做 here: 记录的事情

我重新配置了相应的 EC2 实例 EC2-->负载均衡器-->侦听器,以便 HTTPS 转发到使用我的 SSL 证书配置的 HTTPS,问题是当我尝试发出 HTTPS 请求之后它只是超时。似乎 ElasticBeanstalk 实例不喜欢我修改 EC2 侦听器。

有什么想法吗?

【问题讨论】:

【参考方案1】:

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

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

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

    我必须修补和维护自己的 AMI,这非常耗时。如果我使用标准镜像,我可以在有新镜像可用时重建环境。 我无法对我的配置设置进行源代码控制 - 它们只是嵌入在云端某处的不透明 AMI 中。

我改编自this post。

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

在其中创建一个名为 environment.config 的文本文件 - 我们将在此处使用 YAML,所以不要在 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)。解决方案资源管理器应如下所示:

web-project.csproj .ebextensions environment.config 我的证书.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 中嵌入密码。

要实现端到端的工作,您还需要:

    将您的负载均衡器配置为将 443 流量转发到 EC2 实例上的端口 443 - 默认切换到端口 80。 在负载平衡器之外配置安全组以允许 443 流量。 将安全组配置到 EC2 实例中以允许 443 流量。

【讨论】:

【参考方案2】:

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

例如配置见Serve HTTPS From Elastic Beanstalk Application Instances。

【讨论】:

【参考方案3】:

要让 SSL 在 LoadBalancer 和 Elastic beanstalk 之间工作,我需要几件事:

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

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

问题是我期待 #2 是免费的。在 Windows Azure 上,当您在实例上配置证书时,这几乎是免费的,但到目前为止,在 AMZN ElasticBeanstalk for windows 上并非如此。

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

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

【讨论】:

以上是关于aws 弹性负载均衡器可以将端口 443 转发到端口 443 以获取弹性 beantalk 实例吗?的主要内容,如果未能解决你的问题,请参考以下文章

408 HTTP 错误尝试使用负载均衡器访问 AWS 弹性 beanstalk 上的 https

AWS 网络负载均衡器和 HTTPS 端点 [关闭]

AWS 负载均衡器将 www.example.com 重定向到 example.com 不起作用

服务器上的 AWS 负载均衡器、静态 IP 和 SSL 终止(不是负载均衡器)

使用 TCP TLS 到 Nginx 的 AWS 经典负载均衡器

如何将健康检查请求 ip 添加到负载均衡器安全组?