Moodle 3.7 Apache с результатами обратного прокси ERR_TOO_MANY_REDIRECTS.
У меня есть сайт SSL со следующим файлом vhosts на сервере Frontend:
<VirtualHost *:80>
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName moodle.site.com:443
SSLEngine on
SecAuditEngine On
RewriteEngine On
ProxyPreserveHost On
ProxyPass / http://101.102.103.104:80/
ProxyPassReverse / http://101.102.103.104:80/
</VirtualHost>
</IfModule>
Я также перенаправляю все 80 запросов порта на порт SSL.
Команда
curl -I https://moodle.site.com/
полученные результаты:
HTTP/1.1 303 See Other
Date: Fri, 09 Aug 2019 19:13:33 GMT
Server: Apache/2.4.38 (Debian)
Strict-Transport-Security: max-age=15768000; includeSubDomains
Location: https://moodle.site.com
Content-Language: en
Content-Type: text/html; charset=UTF-8
На Backend сервере в Moodle config.php у меня есть:
$CFG->wwwroot = 'https://moodle.site.com';
$CFG->reverseproxy = true;
$CFG->sslproxy = 1;
Любая идея, почему я получаю ошибку «ERR_TOO_MANY_REDIRECTS» в Google Chrome, когда я пытаюсь открыть https://moodle.site.com URL?
РЕДАКТИРОВАТЬ1:
101.102.103.104 - это IP-адрес внутреннего сервера Moodle. У внешнего сервера есть имя поддомена moodle.site.com, которое разрешается в 1.2.3.4. Пользователь вводит URL-адрес moodle.site.com, который должен отменить содержимое прокси-сервера с внутреннего сервера Moodle с IP-адреса 101.102.103.104.
У меня было 4 проблемы, поэтому мне пришлось их исправить (команды командной строки должны выполняться от имени root или использовать sudo):
1) модуль mod_ssl Apache не был активирован. Проверить в командной строке, активен ли mod_ssl:
apache2ctl -M | grep ssl
Должно отображаться это (если активно):
ssl_module (shared)
ИСПРАВИТЬ (включить mod_ssl в командной строке):
a2enmod ssl
# Considering dependency setenvif for ssl:
# Module setenvif already enabled
# Considering dependency mime for ssl:
# Module mime already enabled
# Considering dependency socache_shmcb for ssl:
# Enabling module socache_shmcb.
# Enabling module ssl.
# See /usr/share/doc/apache2/README.Debian.gz on how to configure SSL and create self-signed certificates.
# To activate the new configuration, you need to run:
# systemctl restart apache2
2) Я использую директиву Header в файле конфигурации Apache SSL conf, например:
# Guarantee HTTPS for 180 days including sub domains
Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains"
Поскольку для этого требуется модуль Apache mod_headers, он не был активирован. Проверить в командной строке, активен ли mod_headers:
apache2ctl -M | grep headers
Должно отображаться это (если активно):
headers_module (shared)
ИСПРАВИТЬ (включите mod_headers в командной строке):
a2enmod headers
3) Мне пришлось использовать https ProxyPass URL вместо http в файле конфигурации Apache vhost:
Неправильно:
ProxyPass / http://101.102.103.104:80/
ProxyPassReverse / http://101.102.103.104:80/
ХОРОШО:
ProxyPass / https://101.102.103.104/
ProxyPassReverse / https://101.102.103.104/
4) Пришлось включить директиву SSLProxyEngine для использования SSL в ProxyPass в файле конфигурации Apache vhost.
ИСПРАВИТЬ: Добавлен SSLProxyEngine в /etc/apache2/sites-available/myvhost.conf
SSLProxyEngine on