Перенаправление всего http-трафика на https с помощью AWS ELB

Итак, я просмотрел другие подобные вопросы, и они предлагают решения, но ни один из них по какой-то причине не работает. Итак, для начала мой ELB настроен так, что

HTTP (incoming) -> HTTP (instance)
HTTPS (incoming) -> HTTP (instance)

Таким образом, оба трафика должны поступать на порт 80. И это работает, например, когда я захожу на свой сайт, используя http://mydomain.com или https://mydomain.com, он может отображаться, даже если у меня есть VirtualHost только для порта 80.

Проблема заключается в попытке переписать весь http-трафик на https. Я делаю это на основе портов (проверьте, если !443 и перепишите на https), но теперь это не сработает, когда все переходит на 80. Итак, я использую сервер Apache и имею это правило перезаписи.

RewriteEngine on
RewriteCond %{HTTP_HOST} www.(.+) [OR,NC]    # Added
RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
RewriteRule ^/?(.*) https://mydomain.com%{REQUEST_URI} [L,R=301]

Но это никогда не работает. Есть ли другие строки, которые мне не хватает? Есть ли способ проверить, соответствует ли это условие? Я пробовал использовать как !https, так и http в качестве условия, но ни одно из них не сработало.

изменить: немного изменил мой RewriteRule на то, что он есть сейчас, и он все еще не работает. Я добавил дополнительное условие для перезаписи www, и оно работает. HTTP:X-Forwarded-Proto либо отсутствует, либо не установлен балансировщиком нагрузки.

редактировать: ошибка была ДЕЙСТВИТЕЛЬНО глупой. Я просто подключался по SSH не к тому экземпляру. Спасибо, что терпите мою глупость


person user1561753    schedule 17.05.2014    source источник


Ответы (2)


Это просто ваш RewriteRule недействителен. См. эту публикацию о том, как должен смотреть.

person Knut    schedule 17.05.2014
comment
Я пробовал это, и это не работает. И я ЗНАЮ, что мой RewriteRule верен, потому что я также создал правило маршрутизации www, и это сработало. Есть ли способ проверить, установлен ли HTTP: X-Forwarded-Proto? - person user1561753; 19.05.2014

Для перезаписи с http на https используйте следующие правила.
Также проверьте, включена ли перезапись вашего мода и правильно ли она работает.

RewriteEngine On
# This will enable the Rewrite capabilities

RewriteCond %{HTTPS} !=on
# This checks to make sure the connection is not already HTTPS for "normal" conditions

RewriteCond %{HTTP:X-Forwarded-Proto} !https
# This checks the connection is not already HTTPS for AWS conditions

RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
# This rule will redirect users from their original location, to the same location but using HTTPS.
# i.e.  http://www.example.com/foo/ to https://www.example.com/foo/
# The leading slash is made optional so that this will work either in httpd.conf
# or .htaccess context
person hemc4    schedule 17.05.2014
comment
Это решение не будет работать с ELB, выполняющим преобразование https-›http, и создаст бесконечный цикл перенаправления. Правильное решение (при наличии балансировщика нагрузки) состоит в том, чтобы действительно изучить заголовки HTTP для X-Forwarded-Proto и соответствующим образом перенаправить. - person Gui Ambros; 16.10.2014
comment
Добавлено отсутствующее условие выше: RewriteCond %{HTTP:X-Forwarded-Proto} !https - person Per Quested Aronsson; 28.04.2016