我正在使用django开发弹性beanstalk,我想对apache配置进行两处更改:
1.将www.domain.com重定向到domain.com
2.将http://domain.com重定向到https://domain.com
我没有apache配置的经验,谷歌搜索它让我觉得我应该把RewriteRules放在.htaccess文件中 .
示例:How to force https on amazon elastic beanstalk without failing the health check
我找不到有关如何使用弹性beanstalk配置(.ebextensions)的说明,我试图简单地将.htaccess文件放在我的root filder中并进行部署,但它不起作用 .
有谁知道如何在弹性 beans 茎中添加RewriteRules?
3 回答
这是一个简单的解决方案
ssh进入您的EC2实例
将/etc/httpd/conf.d/wsgi.conf的内容复制到名为wsgi.conf的本地文件中,该文件将放在应用程序的基本文件夹中
编辑wsgi.conf的本地版本,并在<VirtualHost> </ VirtualHost>标记内添加以下重定向规则
将 “/status” 更改为您用作 health check 页面的任何页面 .
保存文件
编辑您的<app> .conf文件 . ebextensions 目录添加容器命令以通过Amazon版本复制此版本的wsgi.conf
部署代码 .
/etc/httpd/conf.d/wsgi.conf中部署的wsgi.conf版本现在将包含必要的重定向规则 .
它应该工作,并且将为每个部署正确更新文件 . 唯一需要注意的是,如果Amazon将来更改其基本wsgi.conf文件内容,那么您的副本可能不再有效 .
资料来源:rickchristianson
有
www.example.com
转到example.com
可以使用DNS中的CNAME完成,如果你不关心它实际上是重定向 . 如果需要重定向,可以将其添加到下面的Apache配置中 . 这个答案的主要内容是详细说明如何在Elastic Beanstalk上修改Apache配置(因为正确地执行此操作并不是非常简单) .此答案假定您已在负载均衡器安全组中启用了https,将SSL证书添加到负载均衡器,将443添加到负载均衡器转发的端口,并使用Route 53将您的域名指向Elastic Beanstalk环境(或等效的DNS服务) .
您需要做的就是将以下内容添加到您的某个.conf files in the .ebextensions directory of your project中:
解释
这在Elastic Beanstalk之外是适度的直接向前 . 通常会添加一个Apache重写规则,如下所示:
或者,如果在负载均衡器后面,就像我们在这种情况下:
但是,这些配置仅在
<VirtualHost>
块中有效 . 将RewriteCond
更改为<If>
块允许它在<VirtualHost>
块之外正常工作,允许我们放入独立的Apache配置文件 . 请注意,CentOS上的标准Apache设置(包括ElasticBeanstalk上的设置)包含与/etc/httpd/conf.d/*.conf
匹配的所有文件,这些文件与我们存储此文件的文件路径相匹配 .如果您不在负载均衡器之后,条件的
-n '%{HTTP:X-Forwarded-Proto}'
部分会阻止它重定向,允许您在具有负载均衡器和https的 生产环境 环境与单实例且没有https的分段环境之间进行共享配置 . 如果您在所有环境中使用负载 balancer 器和https,则不需要这样做,但拥有它并没有什么坏处 .我见过不好的解决方案
我已经看到了很多关于这个问题的糟糕解决方案,值得深入了解为什么这个解决方案是必要的 .
Use Cloudfront: 有人建议在Elastic Beanstalk前面使用非缓存的Cloudfront设置来执行HTTP到HTTPS的重定向 . 这增加了一个全新的服务(从而增加了复杂性),这不是在非常动态内容上强制HTTPS的正确工具 . Apache配置是这个问题的正常解决方案,Elastic Beanstalk使用Apache,所以这就是我们应该采用的方式 .
SSH into the server and...: 这与Elastic Beanstalk完全相反,并且存在很多问题 . 通过自动缩放创建的任何新实例都具有配置 . 任何数量的合理环境更改都将消除配置 . 这真是个坏主意 .
Overwrite the Apache config with a new file: 这已经进入了正确的解决方案领域,但如果Elastic Beanstalk改变了方面,则会给您带来维护噩梦服务器设置(他们很可能会这样做) . 另请参阅下一个项目中的问题 .
Dynamically edit the Apache config file to add a few lines: 这是一个不错的主意 . 这样做的问题是,如果Elastic Beanstalk更改了默认Apache配置文件的名称,它将无法工作,并且当您最不期望时,此文件可能会被覆盖:https://forums.aws.amazon.com/thread.jspa?threadID=163369
仅供其他人参考,使用Zags' solution将非www重定向到www,将其添加到您的
.ebextensions/your_file.config
: