У меня есть BigIp, который имеет две точки входа HTTP и HTTPS, обе точки входа связываются с моим сервером apache с помощью протокола HTTP.
Сертификат HTTPS находится на BigIP, и выполняется разгрузка SSL.
Проблема в том, что на моем сервере apache у меня есть следующее правило перезаписи:
RewriteRule ^(/?)$ /fr.html [R=301,L]
Если я захожу на свой сайт с https, сайт перенаправляется на http (что не очень хорошо).
Я могу принудительно перенаправить https на apache, но я хочу получить доступ к своему сайту как по http, так и по https.
Насколько мне известно, возможны примерно три подхода.
Не делайте никакого переназначения URL-адресов на уровне Apache, поместите всю такую логику на F5. F5 знает об исходном протоколе и генерирует правильные URL-адреса HTTP (S).
Поскольку вы выполняете разгрузку SSL, ваш фактический веб-сервер не знает, был ли исходный запрос сделан через HTTPS или простой HTTP. Вы можете сделать так, чтобы Apache (и все другие ваши приложения) знали об исходном протоколе, который использовал клиент, внедрив X-Forwarded-Proto
заголовок на F5.
Затем вы можете сделать перенаправления с учетом протокола:
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} https [NC]
RewriteRule ^(/?)$ https://%{HTTP_HOST}%/fr.html [R=301,L]
RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
RewriteRule ^(/?)$ /fr.html [R=301,L]
http://www.example.com
к https://www.example.com
. Это дает дополнительное преимущество, так как предотвращает появление предупреждений о "небезопасном содержании", когда ваши веб-сайты и веб-приложения содержат другие абсолютные ссылки на http://www.example.com
для таблиц стилей, изображений, ссылок и другого контента.
STREAM::expression { @http://<www.example.com>@https://<www.example.com>@ }
Изменить: четвертый вариант, конечно, не отправлять HTTP-перенаправление клиенту, а просто заменять URL-адрес внутри Apache, другими словами, терять R
флаг...
Поскольку вы выгружаете SSL, часто проще «разгрузить» исправление в перенаправлениях, поскольку @HBruijn сказал, что вы можете использовать iRule, но вы также можете просто использовать опцию «Redirect Rewrite» в профиле HTTP, связанном с вашим виртуальным https. -сервер.
Оба варианта подробно представлены здесь: https://devcentral.f5.com/articles/rewriting-redirects
По сути, установка "Перенаправить перезапись" на "Все" в вашем профиле должна работать.