Dan*_*ofe 21 apache .htaccess amazon-web-services amazon-elastic-beanstalk
我正在使用django开发弹性beanstalk,我想对apache配置进行两处更改:
1.将www.domain.com重定向到domain.com
2.将http://domain.com重定向到https://domain.com
我没有apache配置的经验,谷歌搜索它让我觉得我应该把RewriteRules放在.htaccess文件中.
示例: 如何在亚马逊弹性beanstalk上强制使用https而不会失败运行状况检查
我找不到有关如何使用弹性beanstalk配置(.ebextensions)的说明,我试图简单地将.htaccess文件放在我的root filder中并进行部署,但它不起作用.
有谁知道如何在弹性豆茎中添加RewriteRules?
Zag*_*ags 51
有www.example.com去到example.com可以用CNAME在DNS做,如果你不关心有它实际上是一个重定向.如果需要重定向,可以将其添加到下面的Apache配置中.这个答案的主要内容是详细说明如何在Elastic Beanstalk上修改Apache配置(因为正确地执行此操作并不是非常简单).
此答案假定您已在负载均衡器安全组中启用了https,将SSL证书添加到负载均衡器,将443添加到负载均衡器转发的端口,并使用Route 53将您的域名指向Elastic Beanstalk环境(或等效的DNS服务).
您需要做的就是将以下内容添加到项目目录中的一个.conf文件中.ebextensions:
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>
Run Code Online (Sandbox Code Playgroud)
这在Elastic Beanstalk之外是适度的直接向前.通常会添加一个Apache重写规则,如下所示:
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Run Code Online (Sandbox Code Playgroud)
或者,如果在负载均衡器后面,就像我们在这种情况下:
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
Run Code Online (Sandbox Code Playgroud)
但是,这些配置仅在<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?线程ID = 163369
这是一个简单的解决方案
编辑wsgi.conf的本地版本,并在<VirtualHost> </ VirtualHost>标记内添加以下重定向规则
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule !/status https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
Run Code Online (Sandbox Code Playgroud)将“ / status”更改为您用作运行状况检查页面的任何页面。
在中编辑<app> .conf文件。ebextensions 目录添加一个容器命令,以将该版本的wsgi.conf复制到Amazon的版本上
container_commands:
01_syncdb:
command: "django-admin.py syncdb --noinput" leader_only: true
02_collectstatic:
command: "django-admin.py collectstatic --noinput"
03_wsgireplace:
command: 'cp wsgi.conf /etc/httpd/conf.d/wsgi.conf'
...
Run Code Online (Sandbox Code Playgroud)部署代码。
它应该可以正常工作,并且将为每个部署正确更新文件。唯一需要注意的是,如果亚马逊将来更改其基本wsgi.conf文件的内容,则您的副本可能不再起作用。
资料来源:rickchristianson
这在 AWS 文档中得到了很好的解释,如下所示:
要扩展 Elastic Beanstalk 默认 Apache 配置,请将 .conf 配置文件添加到.ebextensions/httpd/conf.d应用程序源包中命名的文件夹中。Elastic Beanstalk Apache 配置会自动在此文件夹中包含 .conf 文件。
~/workspace/my-app/
|-- .ebextensions
| -- httpd
| -- conf.d
| -- myconf.conf
| -- ssl.conf
-- index.jsp
Run Code Online (Sandbox Code Playgroud)
要完全覆盖 Elastic Beanstalk 默认 Apache 配置,请在源包中的.ebextensions/httpd/conf/httpd.conf.
~/workspace/my-app/
|-- .ebextensions
| `-- httpd
| `-- conf
| `-- httpd.conf
`-- index.jsp
Run Code Online (Sandbox Code Playgroud)
如果您覆盖 Elastic Beanstalk Apache 配置,请将以下几行添加到您的 httpd.conf 以提取 Elastic Beanstalk 配置以用于增强型运行状况报告和监控、响应压缩和静态文件。
IncludeOptional conf.d/*.conf
IncludeOptional conf.d/elasticbeanstalk/*.conf
Run Code Online (Sandbox Code Playgroud)
笔记
要覆盖 port 上的默认侦听器
80,请包含一个名为00_application.confat 的文件以.ebextensions/httpd/conf.d/elasticbeanstalk/覆盖 Elastic Beanstalk 配置。
有关工作示例,请查看/etc/httpd/conf/httpd.conf环境中实例上的 Elastic Beanstalk 默认配置文件。.ebextensions/httpd源包中文件夹中的所有文件都复制到/etc/httpd在部署期间,。
可以在此链接下查看更多详细信息Extending and overriding the default Apache configuration。最好使用正确的方法而不是补丁或解决方法。
| 归档时间: |
|
| 查看次数: |
20322 次 |
| 最近记录: |