How to force https on amazon elastic beanstalk

假设您已在负载平衡器安全组中启用https,将SSL证书添加到负载平衡器,将443添加到负载平衡器转发的端口,并使用Route 53将您的域名指向Elastic Beanstalk环境(或等效DNS服务)。它还假定您没有使用基于docker的部署

所有你需要做的是将以下内容添加到您的一个.config files in the .ebextensions directory of your project

files:
    "/etc/httpd/conf.d/ssl_rewrite.conf":
        mode: "000644"
        owner: root
        group: root
        content: |
            RewriteEngine On
            <If "-n ‘%{HTTP:X-Forwarded-Proto}‘ && %{HTTP:X-Forwarded-Proto} != ‘https‘">
            RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
            </If>

这在Elastic Beanstalk外是适度直接的。通常会添加一个Apache重写规则,如下所示:

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

或者,如果在负载均衡器后面,就像我们在这种情况下:

RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

然而,这些配置仅在< VirtualHost>块。将RewriteCond改变为< If>块允许它在< VirtualHost>块,允许我们放入一个独立的Apache配置文件。请注意,CentOS上的标准Apache设置(包括ElasticBeanstalk上的设置)包括所有匹配/etc/httpd/conf.d/*.conf的文件,这与我们存储此文件的文件路径相匹配。

条件的-n’%{HTTP:X-Forwarded-Proto}’部分阻止它重定向,如果您不在负载平衡器后面,允许您在生产环境与负载平衡器和https之间共享配置,一个临时环境是单实例,没有https。如果您在所有环境中使用负载平衡器和https,这不是必需的,但它不会受到伤害。

我见过的坏解决方案

我看到了很多坏的解决方案,这个问题,值得通过他们来了解为什么这个解决方案是必要的。

>使用Cloudfront:有些人建议在Elastic Beanstalk之前使用非缓存的Cloudfront设置来执行HTTP到HTTPS重定向。这增加了一个不完全合适的全新服务(因此增加了复杂性)(Cloudfront是一个CDN;它不是对继承动态内容强制使用HTTPS的正确工具)。 Apache配置是这个问题的正常解决方案,Elastic Beanstalk使用Apache,所以这是我们应该去的方式。
> SSH到服务器和…:这是完全对立的Elastic Beanstalk的点,并有这么多的问题。通过自动扩展创建的任何新实例将不具有修改的配置。任何克隆的环境将不具有配置。任何数量的合理设置的环境更改都将擦除配置。这只是一个坏主意。
>用一个新文件覆盖Apache配置:这是进入正确的解决方案领域,但如果Elastic Beanstalk改变了服务器设置的方面(他们很可能做的),那么会给你带来维护噩梦。也看到下一个项目中的问题。
>动态编辑Apache配置文件以添加几行:这是一个不错的想法。这样做的问题是,如果Elastic Beanstalk更改其默认Apache配置文件的名称,并且该文件可以被覆盖,当你最不期望的时候它不会工作:https://forums.aws.amazon.com/thread.jspa?threadID=163369

原文:https://codeday.me/bug/20171210/105195.html

原文地址:https://www.cnblogs.com/xiewenming/p/aws.html

时间: 2024-08-01 03:53:47

How to force https on amazon elastic beanstalk的相关文章

How to ssh to your Amazon Elastic Beanstalk instance?

Well, if it's ec2 or a digital ocean server, it would be a lot easier- you do what you normally do for a linux server. Elastic Beanstalk(eb) is supposed to facilitate the deployment process. but the setup/configuration is not that enjoyable, at least

DevOps on AWS之Elastic BeanStalk

Elastic BeanStalk相关概念 童话世界中存在着一种魔力beanstalk(豆荚),种在花盆里可以无限的向上生长,越长越高直达云端.AWS Elastic Beanstalk也采用类似概念,用户只需部署代码即可自动处理包括容量预置.负载均衡.自动扩展和应用程序运行状况监控在内的部署工作.同时能够完全控制为应用程序提供支持的 AWS 资源,并可随时访问基础资源.Elastic Beanstalk服务本身不收取任何费用,客户只需支付业务所需的服务器和存储资源所需的基础费用. 引用AWS官

向 Elastic Beanstalk 环境中添加数据库

lastic Beanstalk 提供了与 Amazon Relational Database Service (Amazon RDS) 的集成以帮助您将数据库实例添加到 Elastic Beanstalk 环境.您可以使用 Elastic Beanstalk 在创建环境期间或之后将 MySQL.PostgreSQL.Oracle 或 SQL Server 数据库添加到您的环境.当您将数据库实例添加到您的环境时,Elastic Beanstalk 会通过设置数据库主机名.端口.用户名.密码和数

Elastic Beanstalk 自定义平台

要创建自定义平台,您需要基于所支持的操作系统之一 — Ubuntu.RHEL 或 Amazon Linux(有关确切版本号,请参阅 Platform.yaml 文件格式中的 flavor 条目)— 构建 AMI 并进一步添加自定义.您可使用 Packer(一种开源工具,用于为多种平台创建系统映像,包括用于 Amazon Elastic Compute Cloud (Amazon EC2) 的 AMI)创建您自己的 Elastic Beanstalk 平台.Elastic Beanstalk 平台

Elastic Beanstalk 环境的 Auto Scaling 组

您的 Elastic Beanstalk 包含一个 Auto Scaling 组,该组管理您环境中的 Amazon EC2 实例.在单实例环境中,Auto Scaling 组可确保始终有一个正在运行的实例.在负载均衡的环境中,您将为组配置一系列要运行的实例,Amazon EC2 Auto Scaling 将根据负载按需添加或删除实例. Auto Scaling 组还会为您的环境中的实例管理启动配置.您可以修改启动配置,以更改实例类型.密钥对.Amazon Elastic Block Store

管理应用程序版本Elastic Beanstalk

只要您上传源代码,Elastic Beanstalk 就会创建应用程序版本.当您使用环境管理控制台或 EB CLI 创建环境或上传并部署代码时,通常会出现此情况.Elastic Beanstalk 会根据应用程序的生命周期策略以及在您删除应用程序时删除这些应用程序版本.有关应用程序生命周期策略的详细信息,请参阅配置应用程序版本生命周期设置. 您也可以上传源包,而无需从应用程序管理控制台部署它.Elastic Beanstalk 将源包存储在 Amazon Simple Storage Servi

AWS Elastic Beanstalk + Tomcat

AWS - Amazon Web Services (AWS) - Cloud Computing Services EC2 - Amazon Elastic Compute Cloud (EC2) Create First Application in Elastic Beanstalk 1. Login AWS -> Services -> All AWS Services -> EC2 2. EC2 Dashboard -> Network & Security -&

Elastic Beanstalk设置配置选项

AWS Elastic Beanstalk 支持大量配置选项,这些选项使您可以修改应用于环境中的资源的设置.其中一些选项具有默认值,可以覆盖这些值以自定义环境.其他选项可以进行配置以启动附加功能. Elastic Beanstalk 支持两种用于保存配置选项设置的方法.YAML 或 JSON 格式的配置文件可以放在应用程序的源代码中 (位于一个名为 .ebextensions 的目录中),并作为应用程序源包的一部分进行部署.您可在本地创建和管理配置文件. 保存的配置是您通过正在运行的环境或 JS

配置应用程序版本生命周期设置Elastic Beanstalk Lifecycle

每次您使用 Elastic Beanstalk 控制台或 EB CLI 上传应用程序的新版本时,Elastic Beanstalk 都会创建一个应用程序版本.如果不删除不再使用的版本,您最终会达到应用程序版本限制,并且无法创建此应用程序的新版本. 通过向应用程序应用应用程序版本生命周期策略,您可以避免达到限制.生命周期策略可要求 Elastic Beanstalk 删除应用程序的旧版本,或当应用程序的版本总数超过指定数量时删除一些应用程序版本. Elastic Beanstalk 在您每次创建新