【问题标题】:Enabling https in Drupal behind AWS elastic load balancer在 AWS 弹性负载均衡器后面的 Drupal 中启用 https
【发布时间】:2016-08-16 12:10:21
【问题描述】:

尝试让我们的 drupal 站点在使用 Apache 和 mod_rewrite 的 AWS 负载均衡器后面以完整的 https 运行时,我遇到了非常糟糕的事情。 ELB 充当 SSL 证书提供者。到 ELB 的所有流量都应该加密,然后到 EC2 实例的流量是普通的 HTTP(相当标准)。

我尝试了各种 .htaccess 和 Apache conf.d/*.conf mod_rewrite 条件和规则。当我能够将流量重定向到 https 时,它会破坏 ELB 的健康检查,将我的“不健康”EC2 实例带出池。如果我尝试修复它以便通过 ELB 健康检查,我会遇到无限重定向问题。

在一个星期左右的时间里断断续续地解决这个问题,我终于找到了解决方案。如果你有同样的问题,请看这里!它可能无法 100% 为您工作,但至少我可以说明如何修复它。

【问题讨论】:

  • 这似乎不是一个问题。此外,您发布的问题已经在这里多次询问和回答,例如:stackoverflow.com/questions/17174626/…
  • 我投票结束这个问题,因为这不是一个问题。
  • 对不起--正在写一个答案。我尝试过的其他方法都没有正常工作,或者至少没有足够详细的解释来帮助我。由于使用了 RewriteRule,您发布的内容被尝试并导致无限重定向。我可以让它工作的唯一方法是手动输入我的域。

标签: amazon-web-services ssl drupal https amazon-elb


【解决方案1】:

这是我希望所有流量都指向https://example.com 的网站的答案。 (如果你想要https://www.example.com,你可以做一些调整)

首先,Drupal 的 settings.php 文件位于 /sites/default/settings.php:

我在这个文件中有以下内容:

$base_url = '//example.com';
$conf['reverse_proxy'] = TRUE;
$conf['reverse_proxy_addresses'] = array('name-of-my-loadbalancer.us-west-2.elb.amazonaws.com');
$conf['reverse_proxy_header'] = 'HTTP_X_CLUSTER_CLIENT_IP';

说实话,我不知道上面的“reverse_proxy”设置是否真的有必要。事实上,我已经禁用了它们,它似乎没有影响任何东西,所以它可能不会。重要的是确保您的 settings.php 文件中有 $base_url = '//example.com';

下一部分是配置您的 .htaccess 文件。以下是重要的部分:

RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !=/healthy.html
RewriteRule ^ https://example\.com%{REQUEST_URI} [L,R=301]

对于像我这样的菜鸟来说,一开始很难弄清楚,但这是细分:

  1. RewriteCond %{HTTP:X-Forwarded-Proto} !https 这看起来 负载平衡器发送的协议。如果协议不是 https,启动RewriteRule。

  2. RewriteCond %{HTTPS} off 如果流量流向不是 HTTPS 的站点,则启动 RewriteRule

  3. RewriteCond %{REQUEST_URI} !=/healthy.html 这是很重要的一点。我有一个简单的 health.html 文件,其中包含“成功!”这个词。在我的 Apache 主 drupal webroot 目录中。当 ELB 访问 health.html 文件时,它将绕过我们的重写规则。如果没有,ELB 健康检查将失败,使我们的服务器脱机。

  4. RewriteRule ^ https://example\.com%{REQUEST_URI} [L,R=301] 这是实际的重写规则。如果上述所有条件都通过,那么这会将传入的 URL 重写为https://example.com/whatever。顺便说一句,L 代表“最后一条”,如“这是该集合的最后一条规则”,“R=301”代表“301 重定向”。

唯一没有正确重定向的情况是我手动输入https://www.example.com(开头是https)。我想我可以用另一个简单的 RewriteCond 来解决这个问题。

【讨论】:

    猜你喜欢
    • 2017-09-30
    • 2013-03-22
    • 1970-01-01
    • 2013-07-19
    • 2021-05-27
    • 2018-05-02
    • 2014-01-24
    • 2014-07-18
    • 2015-05-22
    相关资源
    最近更新 更多