使用负载均衡器在 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

AWS Elastic Beanstalk 负载均衡器 SSL/HTTPS 不起作用