2016-04-22 4 views
0

У меня было очень плохое время, пытаясь заставить наш сайт drupal работать в полном https за балансиром нагрузки AWS, используя Apache и mod_rewrite. ELB выступает в качестве поставщика сертификатов SSL. Весь трафик на ELB должен быть зашифрован, тогда трафик на экземпляры EC2 является обычным HTTP (довольно стандартным).Включение https в Drupal за балансировщиком эластичной нагрузки AWS

Я пытался использовать всевозможные .htaccess и Apache conf.d/*. Conf mod_rewrite условия и правила. Когда я смог перенаправить трафик на https, он нарушил бы проверки работоспособности ELB, в результате чего мой «нездоровый» экземпляр EC2 вышел из пула. Если бы я попытался исправить это, чтобы проверить работоспособность ELB, я бы получил бесконечную проблему перенаправления.

Через неделю или около того, работая над этим, я наконец нашел решение. Если у вас такая же проблема, посмотрите здесь! Он может не работать на вас 100%, но, по крайней мере, я могу пролить свет на то, как это исправить.

+0

Это, похоже, не вопрос. Кроме того, проблема, о которой вы публикуете, уже была задана и ответила здесь несколько раз, например здесь: http://stackoverflow.com/questions/17174626/elb-and-apache-configuration-for-https-website –

+0

I ' м, чтобы закрыть этот вопрос как вне темы, потому что это не вопрос. –

+0

Извините - написали ответ. Ни один из других методов, которые я пробовал, не работал должным образом, или, по крайней мере, не был объяснен достаточно подробно, чтобы помочь мне. Попытка была выполнена, и вы сделали бесконечные перенаправления из-за используемого RewriteRule. Единственный способ заставить его работать - это вручную ввести свой домен. – tbox

ответ

1

Ну вот мой ответ на сайт, который я хочу ВСЕГО движения, направленного на https://example.com. (Если вы хотите https://www.example.com, вы можете сделать несколько настроек)

Во-первых, settings.php файл в Drupal в /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». Фактически, я отключил их, и это, похоже, не влияет ни на что, так может быть и не так. Важная часть - убедиться, что у вас есть файл $base_url = '//example.com'; в файле settings.php.

Следующая часть настраивает ваш файл .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, содержащий слово «Успех!». в моей главной директории веб-кортежей drupal для Apache. Когда файл health.html получает доступ к ELB, он обходит наше правило перезаписи. Если бы проверка работоспособности ELB не удалась, отключение нашего сервера (ов).

  4. RewriteRule^https://example\.com%{REQUEST_URI} [L,R=301] Вот фактическое правило перезаписи. Если все перечисленные выше условия пройдут, это перепишет входящий URL-адрес в https://example.com/whatever. Кстати, L означает «Last», как в «это последнее правило этого набора», а «R = 301» означает «301 Redirect».

Единственный раз, когда это не делает правильный редирект, если я вручную ввести в https://www.example.com (с HTTPS в начале). Думаю, я могу исправить это с помощью еще одного простого RewriteCond.

Смежные вопросы