使用负载均衡器在 AWS Elastic Beanstalk 上重定向所有 www 和 http ==>> 非 www https
Posted
技术标签:
【中文标题】使用负载均衡器在 AWS Elastic Beanstalk 上重定向所有 www 和 http ==>> 非 www https【英文标题】:Redirect all www and http ==>> non www https on AWS Elastic Beanstalk with Load Balancer 【发布时间】:2014-06-18 04:12:36 【问题描述】:我目前已将所有http
流量重定向到https
。
RewriteEngine On
RewriteCond %HTTP:X-Forwarded-Proto !=https
RewriteRule ^/(.*)$ https://%SERVER_NAME/$1 [R=301,L]
以上工作正常。
现在我正在尝试添加重写条件以强制所有 https://www
流量到 https
而没有 www
。
请注意,这是在 Elastic Load Balancer 后面运行 Apache 的 AWS Elastic Beanstalk
==============================
编辑:
工作代码:
RewriteEngine On
RewriteCond %HTTP:X-Forwarded-Proto !=https [OR]
RewriteCond %HTTP_HOST ^www\. [NC]
RewriteCond %SERVER_NAME ^(www\.)?(.*)$ [NC]
RewriteRule ^/?(.*)$ https://%2/$1 [L,R=301]
【问题讨论】:
【参考方案1】:试试这个规则:
RewriteEngine On
RewriteCond %HTTPS off [OR]
RewriteCond %HTTP_HOST ^www\. [NC]
RewriteCond %SERVER_NAME ^(www\.)?(.*)$ [NC]
RewriteRule ^/?(.*)$ https://%2/$1 [L,R=301]
【讨论】:
感谢您的回复。不幸的是,它无法正常工作,因为所有流量都被重定向到https://www.
并且服务器/域丢失。我认为这与 AWS 负载均衡器 X-Forward-Proto 有关
@WayBehind 哎呀,%1
应该是 %2
再次感谢!不幸的是,这次我们有"This webpage has a redirect loop"
和server is redirecting the request for this address in a way that will never complete
。
@WayBehind 你确定你没有其他东西正在重定向到某个地方吗?这些规则不会导致循环,除非其他东西重定向回具有“www”或非 SSL
@WayBehind 哦,没错,意思是说你应该用你的行替换%HTTPS off
部分:%HTTP:X-Forwarded-Proto !=https
(尽管需要有那个[OR]
)【参考方案2】:
其实RewriteCond %HTTP:X-Forwarded-Proto ^http$ [OR]
会更好,因为!=https
没有通过 ELB 健康检查。所以完整的工作答案是:
RewriteEngine On
RewriteCond %HTTP:X-Forwarded-Proto ^http$ [OR]
RewriteCond %HTTP_HOST ^www\. [NC]
RewriteCond %SERVER_NAME ^(www\.)?(.*)$ [NC]
RewriteRule ^/?(.*)$ https://%2/$1 [L,R=301]
【讨论】:
谢谢!我会试一试!【参考方案3】:还要考虑 ELB 健康检查的使用:
RewriteEngine On
RewriteCond %HTTP:X-Forwarded-Proto !=https [OR]
RewriteCond %HTTP_HOST ^www\. [NC]
RewriteCond %HTTP_USER_AGENT !ELB-HealthChecker
RewriteCond %SERVER_NAME ^(www\.)?(.*)$ [NC]
RewriteRule ^/?(.*)$ https://%2/$1 [L,R=301]
【讨论】:
【参考方案4】:仅适用于寻找使用 ElasticBeanstalks 配置文件的完整复制和粘贴解决方案的任何人。
-
在
.ebextensions/
中创建文件,我们称之为01-https.config
。
添加以下内容:
files:
"/etc/httpd/conf.d/http-redirect.conf":
mode: "000644"
owner: root
group: root
content: |
RewriteEngine On
RewriteCond %HTTP_HOST ^www\.(.*)$ [OR,NC]
RewriteCond %HTTP:X-Forwarded-Proto !https
RewriteCond %HTTP_USER_AGENT !ELB-HealthChecker
RewriteRule (.*) https://example.com%REQUEST_URI
这考虑了 ELB 健康检查,适用于以下示例:
http://example.com http://www.example.com https://www.example.com将被重定向到https://example.com
【讨论】:
以上是关于使用负载均衡器在 AWS Elastic Beanstalk 上重定向所有 www 和 http ==>> 非 www https的主要内容,如果未能解决你的问题,请参考以下文章
是否可以将负载均衡器添加到没有负载均衡器的现有 AWS Elastic Beanstalk 应用程序?
使用负载均衡器在 AWS Elastic Beanstalk 上重定向所有 www 和 http ==>> 非 www https
无法让 https 在 Elastic Load Balancer (AWS) 上工作
无法为在 Elastic Beanstalk AWS 上运行 ASP.NET 的网站强制使用 HTTPS(使用经典负载均衡器)
如何在 AWS Elastic Beanstalk 应用程序负载均衡器上运行的 Spring webapp 上获取请求者 IP