Moodle 3.7 & Apache & 反向代理结果 ERR_TOO_MANY_REDIRECTS

Moodle 3.7 & Apache & 反向代理结果 ERR_TOO_MANY_REDIRECTS

Moodle 3.7 Apache 使用反向代理结果 ERR_TOO_MANY_REDIRECTS。

我有一个 SSL 站点,前端服务器上有以下 vhosts 文件:

<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;

知道为什么我在 Google Chrome 中尝试打开时收到“ERR_TOO_MANY_REDIRECTS”错误https://moodle.site.com网址?

编辑1:

101.102.103.104 是 Moodle 后端服务器的 IP 地址。前端服务器具有 moodle.site.com 子域名,解析为 1.2.3.4。用户输入 moodle.site.com URL,该 URL 应从 101.102.103.104 IP 地址反向代理来自 Moodle 后端服务器的内容。

答案1

我遇到了同样的问题。不要更改 setuplib.php 中的任何内容。只需删除php.config 中的 ,并在config.php$CFG->reverseproxy = true;中包含指向您的 moodle 安装的路由,例如 https://....。$CFG->wwwroot

因此,您的 config.php 文件将包含:

$CFG->wwwroot = "https://server/dirs";
$CFG->sslproxy = true;

答案2

我无法访问 Web 服务器配置,因此我必须找到此解决方法。文件 lib/setuplib.php,在我的例子中是第 900 行,Moodle 对此的注释为:$CFG->sslproxy 指定是否使用外部 SSL 设备(即,Moodle 服务器使用 http,外部框将所有内容转换为 https)。

改变

  if (empty($CFG->sslproxy))

为了

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

这就是开始正常安装所需要的全部内容。(经过两个小时的调试,在各处插入 die())

答案3

我有 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)我在 Apache SSL conf 文件中使用 Header 指令,如下所示:

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

由于需要此 mod_headers Apache 模块,因此未将其激活。在命令行中测试 mod_headers 是否处于活动状态:

apache2ctl -M | grep headers

应该显示此内容(如果处于活动状态):

headers_module (shared)

使固定(在命令行中启用 mod_headers):

a2enmod headers

3)我必须在 Apache vhost conf 文件中使用 https ProxyPass URL 而不是 http:

错误的:

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 指令才能在 Apache vhost conf 文件中的 ProxyPass 中使用 SSL。

使固定: 在 /etc/apache2/sites-available/myvhost.conf 中添加了 SSLProxyEngine

SSLProxyEngine on

相关内容