Назад | Перейти на главную страницу

Принудительное использование HTTPS с помощью балансировщика нагрузки AWS Elastic

Мне нужно перенаправить весь входящий HTTP-трафик на HTTPS на моем эластичном балансировщике нагрузки.

Устал использовать Apache mod_rewrite:

 RewriteEngine On
 RewriteCond %{HTTP:X-Forwarded-Proto} !https
 RewriteRule !/status https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

Используя преимущество заголовка X-Forwarded-Proto, добавленного балансировщиком нагрузки, это правило должно инструктировать браузер пользователя запрашивать версию HTTPS того же URL-адреса.

Пока не работает (перенаправления не происходит).

Что я делаю не так?

Есть лучший способ сделать это?

РЕДАКТИРОВАТЬ:

В конечном итоге это сработало:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule ^/(.*)$ https://%{SERVER_NAME}/$1 [R=301,L]

Итак, я предполагаю, что у вас установлен ELB для приема трафика как по HTTP / 80, так и по HTTPS / 443, но все порты перенаправляются на HTTP.

Если вы хотите использовать свой метод (который является умным), уверены ли вы, что то, что вы получите, не %{X-Forwarded-Proto} - в HTTP: Приставка мне кажется странной. В остальном это мне кажется правильным.

Если он находится на виртуальном хосте или в конфигурации основного сервера и все еще не работает, вы можете добавить

RewriteLog rewrite-log
RewriteLogLevel 3

затем загляните в файл rewrite-log чтобы увидеть, что на самом деле происходит. Этот файл может быть невероятно подробным, начиная с более низких уровней. Ведение журнала невозможно запустить из .htaccess файлы.

(Я бы посоветовал вам сделать флажки на RewriteRule [R=301,L] что заставит сервер отправить ответ 301, который сообщает поисковым системам считать перенаправление постоянным и соответственно обновлять свои ссылки.)

В моем случае проблема заключалась в том, что условие! Https нарушало проверку работоспособности.

изменение условия на ^ http $ заставило его работать

RewriteCond %{HTTP:X-Forwarded-Proto} ^http$

обнаружил, что здесь: https://forums.aws.amazon.com/thread.jspa?messageID=641930

Просто хотел добавить свой опыт, поскольку я часами боролся, прежде чем понял, что в моем файле сердцебиения есть неэкранированная точка (/alive.html). Ага.

Вторая проблема заключалась в том, что основной домен не перенаправлял, а файлы. Так http://domain.com/hello.html перенаправлял на https://domain.com/hello.html, но http://domain.com не было.

Вот что я положил в свой файл .htaccess, который у меня сработал:

RewriteEngine On
# SSL connection forced
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{REQUEST_URI} !^/alive\.html$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]