在 Elastic beanstalk 上配置 apache

2024-04-20

我正在 elastic beanstalk 上使用 django 进行开发,我想对 apache 配置进行两处更改:

1. 将 www.domain.com 重定向到 domain.com

2. 重定向http://domain.com http://domain.com to https://domain.com https://domain.com

我没有 apache 配置的经验,谷歌搜索给了我一个想法,我应该将 RewriteRules 放在 .htaccess 文件中。

例子:如何在亚马逊弹性beanstalk上强制使用https而不失败健康检查 https://stackoverflow.com/questions/6858492/how-to-force-https-on-amazon-elastic-beanstalk-without-failing-the-health-check

我找不到有关如何使用弹性 beanstalk 配置(.ebextensions)执行此操作的说明,我尝试简单地将 .htaccess 文件放入我的根文件夹中并进行部署,但它不起作用。

有谁知道如何在弹性豆茎中添加重写规则?


Having www.example.com go to example.com如果您不关心它实际上是重定向,则可以使用 DNS 中的 CNAME 来完成。如果您需要重定向,可以将其添加到下面的 Apache 配置中。这个答案的要点是详细说明如何修改 Elastic Beanstalk 上的 Apache 配置(因为正确执行此操作并不是很简单)。

此答案假设您已在负载均衡器安全组中启用 https,将 SSL 证书添加到负载均衡器,将 443 添加到负载均衡器转发的端口,并使用 Route 53 将您的域名指向 Elastic Beanstalk 环境(或等效 DNS 服务)。

亚马逊Linux 2

大多数基于 AWS Linux 版本 2 的平台都可以选择 Apache 作为代理主机。这可以通过转到“配置”>“软件”> 来完成 “容器选项”并将“代理服务器”设置为“Apache”,或将以下内容添加到您的其中一项.config文件在.ebextensions:

option_settings:
  aws:elasticbeanstalk:environment:proxy:
    ProxyServer: apache

在 AWS Linux 2 上,仅通过将文件添加到代码库来配置 Apache.plaform/httpd/conf.d/,它们将被添加到服务器的 Apache 配置中。您不能再通过编辑 Apache 文件.ebextensions.

要使用 Apache 执行 HTTP 到 HTTPS 重定向,请添加名为的配置文件.platform/httpd/conf.d/ssl_rewrite.conf到您的代码库(相关 AWS 文档 https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/platforms-linux-extend.html)包含以下内容:

RewriteEngine On
<If "-n '%{HTTP:X-Forwarded-Proto}' && %{HTTP:X-Forwarded-Proto} != 'https'">
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</If>

请注意,nginx 可以通过类似的方式进行配置,即添加.conf文件至.platform/nginx/conf.d/(尽管该文件的内容显然会有所不同)。

亚马逊 Linux 1

您需要做的就是将以下内容添加到您的其中之一.config文件在.ebextensions你的项目目录 http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ebextensions.html:

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 to an <If>块允许它在外部正常工作<VirtualHost>块,允许我们放入独立的 Apache 配置文件。请注意,CentOS 上的标准 Apache 设置(包括 ElasticBeanstalk 上的设置)包括所有匹配的文件/etc/httpd/conf.d/*.conf,它与我们存储该文件的文件路径匹配。

The -n '%{HTTP:X-Forwarded-Proto}'如果您不在负载均衡器后面,则部分条件会阻止它重定向,从而允许您在具有负载均衡器和 https 的生产环境与单实例且没有 https 的临时环境之间共享配置。如果您在所有环境中使用负载均衡器和 https,则没有必要这样做,但拥有它也没什么坏处。

我见过的糟糕的解决方案

我见过很多针对这个问题的糟糕解决方案,值得通过它们来理解为什么这个解决方案是必要的。

  1. 使用云前端:有些人建议在 Elastic Beanstalk 前面使用非缓存 Cloudfront 设置来执行 HTTP 到 HTTPS 的重定向。这增加了一个不太合适的全新服务(从而增加了复杂性)(Cloudfront 是一个 CDN;它不是在固有动态内容上强制使用 HTTPS 的正确工具)。 Apache 配置是此问题的正常解决方案,而 Elastic Beanstalk 使用 Apache,因此我们应该采用这种方式。

  2. 通过 SSH 连接到服务器并...:这与 Elastic Beanstalk 的观点完全相反,并且存在很多问题。通过自动缩放创建的任何新实例都不会具有修改后的配置。任何克隆的环境都不会具有该配置。任何数量的合理的环境更改都会消除配置。这真是个坏主意。

  3. 使用新文件覆盖 Apache 配置:这已经进入了正确的解决方案领域,但如果 Elastic Beanstalk 更改了服务器设置的各个方面(他们很可能会这样做),那么您将面临维护噩梦。另请参阅下一项中的问题。

  4. 动态编辑 Apache 配置文件以添加几行:这是一个不错的主意。这样做的问题是,如果 Elastic Beanstalk 更改了默认 Apache 配置文件的名称,该文件将无法工作,并且该文件可能会在您最意想不到的时候被覆盖:https://forums.aws.amazon.com/thread.jspa?threadID=163369 https://forums.aws.amazon.com/thread.jspa?threadID=163369

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Elastic beanstalk 上配置 apache 的相关文章

  • 使用 Cloudformation SAM 的 AWS::Serverless::Api 资源策略

    最近AWS宣布 是否可以将资源策略附加到通过 Cloudformation 使用 SAM 创建的 AWS Serverless Api 我还没有机会尝试这个 但我假设您可以像使用 S3 存储桶策略一样使用它 对你来说最棘手的部分是抓住api
  • Amazon VPC NACL 默认规则评估顺序

    据我了解 NACL 网络访问控制列表 就是子网防火墙 我试图了解创建 NACL 时的默认值 规则 100 默认情况下允许来自所有 IP 的所有端口 否则 一切都被否定 那么 底线是 是全部允许还是全部拒绝 我知道根据 AWS 最佳实践 默认
  • Amazon S3 无法通过 Cloudfront 上传文件

    我想通过 Cloudfront 使用签名 URL 将文件上传到 S3 Cloudfront 行为中允许 HTTP PUT 桶策略 Sid 2 Effect Allow Principal AWS arn aws iam cloudfront
  • 如何随机生成文件的链接?

    我有一个 PDF 文件 我不想通过我网站上的 URL 公开访问该文件 作为 轻微 安全层 我想通过电子邮件向用户发送一个唯一的 随机生成的 URL 他们可以从中下载 PDF 我将把该 PDF 存储在 AWS 或类似的地方 我感觉自己被困在r
  • 不活动后自动“停止”Sagemaker 笔记本实例?

    我有一个 Sagemaker Jupyter 笔记本实例 我一直错误地将它留在网上过夜 不必要地花费了金钱 当没有活动 例如 1 小时 时 是否有任何方法可以自动停止 Sagemaker 笔记本实例 或者我必须制作一个自定义脚本 您可以使用
  • git-http-backend 与 AuthzUnixGroup 无法正常工作

    我正在尝试在 CentOS 6 机器上的 Apache 2 2 上设置一个 git 存储库 并安装了 git 我尝试过许多不同的方向 但我却不知所措 我目前的情况包括能够clone正常 但完全无法推动 似乎我无法使身份验证位正常工作 因为我
  • 为什么 Xampp 控制面板在启动时显示错误访问被拒绝 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我的 Xampp 控制面板遇到问题 当我尝试启动它时 它会弹出一条错误消息 错误 无法创建文件 C xampp xampp control
  • URL 重写 .htaccess

    我正准备开发一个具有以下 url 结构的网站 我是 url 重写的新手 想知道处理此问题的最佳方法 http domain com index php http domain com about about php http domain
  • htaccess 正则表达式目录到变量

    我需要对某些 URL 从目录到变量进行 301 重定向 EXAMPLE http domain com es stackoverflow gt http domain com stackoverflow lang es http domai
  • 在 XAMPP 上设置虚拟主机

    我已经在 Ubuntu 上的 opt lampp 目录中安装了 XAMPP 并且想要设置一些虚拟主机 Apache 虚拟主机教程说明放置
  • 更新AWS S3过期时间

    我想知道如何延长密钥的有效期 我指的不是访问对象的签名 URL 而是密钥本身 我将 AWS 设置为存储桶中的所有对象应在 90 天后过期的规则 在大多数情况下 这就是我希望发生的事情 有时我需要将单个密钥的使用寿命最多再延长 90 天 事实
  • 如何在 PHP 中检查不完整的 POST 请求

    当连接速度较慢的远程 Web 客户端无法发送完整的 POST 请求时 我遇到了问题multipart form data内容 但 PHP 仍然使用部分接收到的数据来填充 POST大批 结果一个值 POST数组可能不完整 并且可能会丢失更多值
  • Dockerfile 从 amazon s3 或其他需要凭据的源复制文件

    我正在尝试构建 Docker 映像 并且需要将一些文件从 S3 复制到该映像 我正在使用的 Dockerfile 内部 Dockerfile FROM library ubuntu 16 04 ENV LANG C UTF 8 LC ALL
  • ElasticCloud 的 ElasticSearch 身份验证错误?

    我刚刚在 ElasticCloud 上设置了一个新的 ElasticSearch 集群 我正在尝试遵循帮助文档 https cloud elastic co help 它说您可以按如下方式发布文档 curl https
  • AWS CLI S3API 查找路径中的最新文件夹

    我有一个非常大的桶 数十万个对象 我有一条路径 假设 s3 myBucket path1 path2 path2 获取也是文件夹的上传内容 因此 示例可能如下所示 s3 myBucket path1 path2 v6 1 0 s3 myBu
  • java.lang.AbstractMethodError: javax.xml.parsers.DocumentBuilderFactory.setFeature(Ljava/lang/String;Z)V

    我有一个应用程序 可以使用它创建 Excel 文件apache POI 3 17我收到此错误消息apache POI当我运行应用程序时记录Tomcat 这是什么意思 我该如何解决 我最终将其添加到 eclipse ini 文件中 Djava
  • 配置 shiro.ini 以进行 JDBC 连接

    作为我新的一年学习新技术计划的一部分 我开始尝试使用 Apache Shiro 安全框架 我设法让基本示例正常工作 该示例将用户名 密码和角色存储在 shiro ini 文件中 但是当我修改 shiro ini 文件以使用 JDBC 时 它
  • 具有维度的 Amazon Web Service CloudWatch 自定义指标

    我正在尝试将数据推送到 AWS CloudWatch 上的自定义指标 但想了解有关维度的更多信息以及如何使用它们 我已经阅读了 AWS 文档 但它并没有真正解释它们的用途以及它如何影响 AWS 管理控制台中的图形 UI 维度是进一步细分指标
  • 以非 root 用户身份使用 AWS CodeBuild

    有没有办法掉root用户开启AWS 代码构建 我们正在构建一个 Yocto 项目 如果我们是 root Bitbake 健全性检查 该项目将在 CodeBuild 上失败 我们绝望的做法也不起作用 build commands chmod
  • 为什么在尝试使用 Java 连接到 RDS PostgreSQL 数据库时会收到 SocketTimeoutException?

    我有一个 Spring 应用程序 我试图在 AWS 上托管 几天来我一直在努力配置 我有一个 EC2 实例 并且能够通过 SSH 连接到它 我还在 AWS 中设置了 Postgres RDS 数据库 但我无法使用 IDE 中的代码连接到它

随机推荐

  • Python 中 Comet 的最新推荐? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 对 numpy 屏蔽数组的操作给出屏蔽的无效值

    来自 numpy 中屏蔽数组的文档numpy 数组上的操作 https docs scipy org doc numpy reference maskedarray generic html operations on masked arr
  • Java 中的内存管理

    如何在Java中手动删除对象 有没有类似的方法obj delete or obj kill 没有真正的办法 Java有一个特殊的垃圾收集器这会为你做到这一点 一旦您的对象没有任何对它的引用 它就会在某个时候被垃圾收集器拾取并销毁 From
  • 带有多个 webapp 的 tomcat ajp 连接器

    我有一个 tomcat 服务器 带有 webapps ROOT 应用程序 以 Apache 为前端 LoadModule proxy ajp module modules mod proxy ajp so and ProxyPass ajp
  • 如何在 Swift 中返回序列?

    我正在尝试编写一个扩展Matrix书中的例子 稍微调整为通用的 https stackoverflow com q 24136604 458193 我正在尝试编写一个名为的方法getRow返回给定行的值序列 在 C 中 我会这样写 IEnu
  • 迭代 JSON 数据? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有一个如下所示的 JSON 数据
  • 数据源中 String 类型的给定值无法转换为指定目标列的 bigint 类型

    这是我的代码 protected void SendToServer Click object sender EventArgs e DataTable Values Session valuesdt as DataTable if Val
  • 必须在创建 QCoreApplication 之前设置属性 Qt::AA_UseSoftwareOpenGL

    所以我的环境是 Windows 10 截至 2019 年 11 月 8 日更新 通过 miniconda 安装了 Python 3 6 Spyder 4 运行 miniconda shell 激活虚拟环境 运行 Spyder 我得到以下信息
  • .PO 到 .MO - 程序转换 (PHP)

    我计划允许用户通过 PHP 用户界面生成 POT 文件 PO 文件 作为 CMS 解决方案的一部分 一旦生成这些文件 简单一点 我希望允许我的系统自动将这些文件转换为 MO 文件以响应用户 POST 请求 我在SO上看到了以下问题 php
  • InvalidArgumentError:ConcatOp:输入的维度应该匹配

    Tensorflow 1 7使用dynamic rnn时 一开始运行良好 但在第32步 当我运行代码时它发生变化 时 出现错误 当我使用较小的批次时 代码似乎可以运行更长时间 但是错误仍然弹出 只是无法弄清楚出了什么问题 from mapp
  • 一个带有一个等号的 php if 语句...?这是什么意思?

    我正在尝试解决问题 并且需要理解这个 if 语句的含义 if confirmation payment modules gt confirmation 我能找到的所有资源只显示带有双等号的 if 语句 而不是单等号 这是 php if 的简
  • 错误:没有运算符 << 与这些操作数匹配?

    我正在练习一些 C 试图离开 Java 我偶然发现了这个恼人的错误 错误 没有操作符 这个错误在我的 cpp 文件中 还有其他错误 但我现在不关心它们 void NamedStorm displayOutput NamedStorm sto
  • 是否可以在 Android Wear 上显示 Google 地图视图?

    是否可以在 Android Wear 上显示 Google 地图视图 我想在地图上向用户显示特定位置 您可以设法在您的 Activity 中嵌入 MapView 但是这是行不通的因为 Android Wear 无法直接访问网络 然而 你能做
  • 使用 ImageIO 发送图像流?

    我设置了一个 ServerSocket 和一个 Socket 因此 ServerSocket 使用 ImageIO write 发送图像流 并且 Socket 尝试读取它们并用它们更新 JFrame 所以我想知道 ImageIO 是否可以检
  • 使用 Bash 下载并在 wordpress wp-config.php 中插入盐字符串

    如何插入变量 SALT 的内容在特定点 线或串 使用 Bash 脚本从 WordPress 获取像 wp contet php 这样的文件 SALT curl L https api wordpress org secret key 1 1
  • 应用 CSS 过滤器时,内联 SVG 在 iOS 和 Safari 中消失

    情况是我有一个内联 SVG 生成的格伦蒂康 https github com filamentgroup grunticon并插入到 DOM 中 它是灰色背景上的白色 带有阴影 我对阴影使用了以下 CSS svg webkit filter
  • 在 Python 中注释函数的正确方法是什么?

    Python 中是否有一种普遍接受的注释函数的方法 以下情况可以接受吗 Create a new user def add self 正确的方法是提供文档字符串 那样 help add 也会吐出你的评论 def add self Creat
  • 绑定用户实体和 GlassFish 主体

    我有一个实体类User其中包含用户名 名字 姓氏和密码等信息 我有 GlassFish 3 1 服务器设置来执行身份验证 到目前为止 一切都很好 在容器对用户进行身份验证后 我需要某种方法将主体绑定到实际的用户实体 毕竟 GlassFish
  • 无法使用 RS256 验证 JWT - 算法无效

    我正在尝试将 JWT Auth 从秘密短语移至 RS256 这是示例代码 import fs from fs import jwt from jsonwebtoken const private key fs readFileSync pr
  • 在 Elastic beanstalk 上配置 apache

    我正在 elastic beanstalk 上使用 django 进行开发 我想对 apache 配置进行两处更改 1 将 www domain com 重定向到 domain com 2 重定向http domain com http d