Завершение SSL-соединения AWS Application Load Balancer с помощью Apache Docker

Я использую балансировщик нагрузки приложений AWS для настройки своей среды.

Балансировщик нагрузки приложений получает запросы из Интернета на порт 443 и перенаправляет их на порт 80.
Сервер Apache работает с докером на сервере EC2 на порту 80 за балансировщиком нагрузки.
Мой веб-сайт разработан с использованием CakePHP. < br /> Когда я позвонил на https://www.example.com, моя веб-страница была загружена.
Однако в PHP, когда я использовал следующий код для получения текущего URL-адреса, я получил URL-адрес http://www.example.com. Я не получаю https. Я получаю только http.

echo Router::url('/', true);

Поэтому, когда приложение выполняет вызов ajax, запросы поступают через http (не https), и браузеры отклоняют запрос как «заблокировано: смешанное содержимое». Я думаю, что запросы должны выходить как https. Укажите, что мне не хватает.

Я пробовал следующее, и ничего не работает

В хост-файле. (или) кладу в .htaccess

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI}

person Wai Phyo San Tin    schedule 23.09.2020    source источник
comment
Если вы каким-то образом определите HTTPS как true в своей среде (например, конфигурационный файл Apache или файл .env), я думаю, это может позаботиться об этом за вас.   -  person Greg Schmidt    schedule 23.09.2020
comment
@GregSchmidt Не могли бы вы показать мне пример того, как определить HTTPS как истинный в apache? Спасибо за помощь.   -  person Wai Phyo San Tin    schedule 24.09.2020
comment
https://httpd.apache.org/docs/2.4/env.html   -  person Greg Schmidt    schedule 24.09.2020


Ответы (1)


Я нашел решение. Хитрость заключается в том, чтобы установить для переменной $ _SERVER ['HTTPS'] значение. В apache включите модуль setenvif. Затем в /etc/apache2/apache2.conf установите следующие настройки

# for port forwarding
RemoteIPHeader X-Forwarded-For

# set Environment Variable
SetEnvIf x-forwarded-proto https HTTPS=on

После этого проверьте phpinfo (), чтобы убедиться, что $ _SERVER ['HTTPS'] включен.

person Wai Phyo San Tin    schedule 22.01.2021