具有反向代理结果 ERR_TOO_MANY_REDIRECTS 的 Moodle 3.7 Apache。
我在前端服务器上有一个带有以下 vhosts 文件的 SSL 站点:
<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;
知道为什么当我尝试打开https://moodle.site.com URL 时在 Google Chrome 中出现“ERR_TOO_MANY_REDIRECTS”错误吗?
编辑1:
101.102.103.104 是 Moodle 后端服务器的 IP 地址。前端服务器有moodle.site.com 子域名,解析为1.2.3.4。用户输入moodle.site.com URL,它应该从101.102.103.104 IP 地址反向代理来自Moodle 后端服务器的内容。
我无权访问 Web 服务器配置,所以我必须找到这个解决方法。文件 lib/setuplib.php,在我的例子中,第 900 行,Moodle 对此的注释:$CFG->sslproxy 指定是否使用外部 SSL 设备(即,Moodle 服务器使用 http,外部框将所有内容转换为 https)。
改变
为了
这就是开始正常安装所需要的一切。(经过两个小时的调试,到处都插入 die())
我有同样的问题。不要更改 setuplib.php 中的任何内容。只需删除
$CFG->reverseproxy = true;
php.config 中的 并在 config.php 中包含到您的moodle安装的路径为 https://$CFG->wwwroot
....。因此,您的 config.php 文件将包含:
我有 4 个问题,所以我必须修复它们(命令行命令应该以 root 身份执行或使用 sudo):
1) 在代理服务器上,未激活 mod_ssl Apache 模块。在命令行中测试,如果 mod_ssl 处于活动状态:
应该显示这个(如果激活):
FIX(在命令行中启用 mod_ssl):
2)我在 Apache SSL conf 文件中使用 Header 指令,如下所示:
因为这个 mod_headers Apache 模块是必需的,所以它没有被激活。在命令行中测试,如果 mod_headers 处于活动状态:
应该显示这个(如果激活):
FIX(在命令行中启用 mod_headers):
3) 我不得不在 Apache vhost conf 文件中使用 https ProxyPass URL 而不是 http:
错误的:
好的:
4) 必须打开 SSLProxyEngine 指令才能在 Apache vhost conf 文件中的 ProxyPass 中使用 SSL。
修复: 在 /etc/apache2/sites-available/myvhost.conf 中添加 SSLProxyEngine