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)。解决方案资源管理器应如下所示:
然后使用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 负载均衡器将 www.example.com 重定向到 example.com 不起作用
服务器上的 AWS 负载均衡器、静态 IP 和 SSL 终止(不是负载均衡器)