当前位置: 首页 > 知识库问答 >
问题:

在弹性豆茎上配置apache

王骏
2023-03-14

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

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

2.将http://domain.com重定向到https://domain.com

有人知道如何在弹性豆茎中添加重写吗?

共有1个答案

欧阳杰
2023-03-14

如果您不关心是否将www.example.com转到example.com,可以使用DNS中的CNAME来完成。如果需要重定向,可以将其添加到下面的Apache配置中。这个答案的主要要点是详细说明如何在Elastic Beanstalk上修改Apache配置(因为正确地执行这一操作并不十分直接)。

此答案假设您已经在load balancer安全组中启用了https,向load balancer添加了SSL证书,向load balancer转发的端口添加了443,并将您的域名指向具有路由53(或等效DNS服务)的Elastic Beanstalk环境。

大多数基于AWS Linux Version2的平台都可以选择Apache作为代理主机。这可以通过转到“配置”>“软件”>“容器选项”并将“代理服务器”设置为“Apache”来完成。

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

您所需要做的就是在项目的.ebextensions目录中的.config文件中添加以下内容:

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>

这是适度直接向前的弹性豆茎外。通常添加如下所示的Apache重写规则:

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

或者,如果在负载均衡器后面,就像我们在这里一样:

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

>

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

    SSH进入服务器和...:这与弹性豆茎完全相反,有很多问题。autoscaling创建的任何新实例都不会有修改后的配置。任何克隆的环境都不具备该配置。一组合理的环境更改的任何数量都将消除配置。这真是个坏主意。

    用一个新文件覆盖Apache配置:这进入了解决方案的正确领域,但如果Electric Beanstalk改变了服务器设置的各个方面(它们很可能会这样做),则会给您带来一场维护噩梦。还可以在下一项中看到问题。

  •  类似资料:
    • 假设我在Wordpress中创建了一个站点,它运行在Elastic Beanstalk上。现在,在运行的应用程序上,我将创建帖子/页面,上传图像等。也就是说,数据库中的一些数据、视频、文件和记录将被添加到运行的应用程序中。 从我在AWS控制台中看到的情况来看,我可以部署一个应用程序的不同版本--但是根据上面的场景,如果我部署了一个新版本,我会不会丢失直接上传到正在运行的应用程序中的所有文件(即文件

    • 我想我应该做的是,为“website.com”创建一个SSL证书,并将该SSL证书应用到AWS EB负载均衡器。然后,我需要为“website.com”创建一个子域,将流量重定向到“something.elasticbeanstalk.com”。客户端应用程序连接到“website.com”的子域,该子域现在是HTTPS,并重定向到“something.elsastic.beanstalk.com

    • 我使用WindowsPowerShell创建了一个弹性Beanstalk环境,并遵循以下部署文档将Django应用程序部署到弹性Beanstalk 我完成了以下步骤:使用Django的Python虚拟环境, 创建了django项目, 创建IAM用户我获得了访问密钥ID和机密访问密钥ID 失败此步骤环境并部署您的Django应用程序 当我尝试it询问访问密钥、秘密访问密钥和区域aws应用程序自动生成

    • 配置验证异常:AWS Elastic Beanstatk无法与Amazon EC2通信以确定是否为Elastic Load均衡创建自定义安全组。 在创建AWS Elastic Beanstalk应用程序时,我在尝试继续“查看和启动”时遇到了这个错误。我是新手。请帮忙。

    • 有人知道是否有可能将现有的AWS弹性豆茎环境更改为应用程序负载平衡器(而不是经典的负载平衡器)。 据我所知,只有应用程序ELB可以被AWS WAF和DDOS“屏蔽”保护,所以任何现有的EB应用程序都不能利用这些特性,因为他们有经典的ELB。

    • 我是AWS的新手,这个问题似乎很基本。然而,我需要看看我是否能找到解决方案。 我首先创建并启动了一个 EC2 实例,然后创建了一个弹性 Beanstalk 实例,并在该实例上部署了一个示例应用程序。默认情况下,弹性 Beanstalk 会将“默认环境”附加到此实例,我无法将其更改为我的 EC2 实例。如何将我的 EC2 实例(我之前创建的实例)附加到此弹性豆茎实例?我正在使用亚马逊免费套餐来学习。