Moodle 3.7 и Apache и результаты обратного прокси ERR_TOO_MANY_REDIRECTS

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

На внутреннем сервере в 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.

0
задан 13 August 2019 в 09:08
3 ответа

У меня было 4 проблемы, поэтому я должен был их исправить (команды командной строки должны выполняться как root или используйте sudo):

1) на проксируемом сервере модуль Apache mod_ssl не был активирован. Проверка в командной строке, если 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) Я использую заголовок в файле конфигурации Apache SSL, например:

# Guarantee HTTPS for 180 days including sub domains 
Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains"

Поскольку этот модуль mod_headers является обязательным, он не был активирован. Проверьте в командной строке, активен ли mod_headers:

apache2ctl -M | grep headers

Должен отобразить это (если активен):

headers_module (shared)

FIX (включить 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
0
ответ дан 20 January 2020 в 17:27

У меня нет доступа к конфигурации веб-сервера, поэтому я должен найти этот обходной путь. Файл lib/setuplib.php, строка 900 в моем случае, комментарий Moodle: $CFG->sslproxy указывает, используется ли внешнее устройство SSL (То есть сервер Moodle использует http, а внешний бокс переводит все на https).

Заменить

  if (empty($CFG->sslproxy))

на

  if (!empty($CFG->sslproxy))

Это все, что нужно для нормального начала установки. (после двух часов отладки с вставкой die() везде)

1
ответ дан 2 December 2020 в 12:41

У меня была такая же проблема. Ничего не меняйте в setuplib.php. Просто удалите $CFG->reverseproxy = true; в php.config и укажите маршрут к вашей установке Moodle как https://.... в $CFG->wwwroot файла config.php.

Итак, ваш файл config.php будет содержать:

$CFG->wwwroot = "https://server/dirs";
$CFG->sslproxy = true;
1
ответ дан 29 December 2020 в 12:13

Теги

Похожие вопросы