带有反向代理的 Moodle 3.5

Moodle 3.5 with Reverse proxy

我在设置 apache 代理后面的 moodle 实例时遇到问题。

这是我代理 运行 服务器的 apache 前端。

<VirtualHost *:80>
    ServerName public.domain.com

ProxyRequests Off
ProxyPreserveHost On

ProxyPass / http://10.10.10.10:81/moodle/
ProxyPassReverse / http://10.10.10.10:81/moodle/
</VirtualHost>

和。

$CFG->wwwroot = 'http://public.domain.com';

我安装没有问题,但是安装完成后我在浏览器中尝试:

http://public.domain.com

此重定向至:http://public.domain.com/moodle/index.php?sessionstarted=1&lang=en...

有人知道会发生什么吗?

解决此问题的最佳方法是将内部主机上的 moodle 安装移动到 Web 服务器的根目录。

将 10.10.10.10 中的 moodle 移动到 / 而不是 /moodle

请注意,如果您将在外部 apache 上使用 SSL(建议),您还应该将以下行添加到您的配置中:

$CFG->sslproxy = true;

我终于解决了这个问题,我正在写这个更详细的答案,以便其他遇到这个问题的人可以按照我的答案去做。

首先我们需要为我们的站点编辑 apache2 配置: 一般来说,您指定站点的 apache2 配置可以在 /etc/apache2/sites-enabled 找到。根据您使用的是 http 还是 https,您需要编辑正确的配置文件。 http 的默认名称是 000-default.conf,https 的默认名称是 000-default-ssl.conf

<VirtualHost *:80>....</VirtualHost> 部分之间添加以下行。

# MOODLE
ProxyRequests Off
ProxyPreserveHost On
ProxyPass "/" "http://10.10.10.10:81/moodle/"
ProxyPassReverse "/" "http://10.10.10.10:81/moodle/"

然后我们需要重新启动我们的 apache2 网络服务器,这可以通过命令 service apache2 restart.

来完成

现在我们还需要在我们的 moodle config.php 文件中编辑一些东西。如果您使用 moodle 指南中的默认安装位置,则可以在具有 IP(在本例中)10.10.10.10 的服务器上的 /var/www/html/moodle 处找到此文件。

config.php 文件中,我们在默认 $CFG 声明下附加以下行:请确保根据您的服务器设置更改所有值。

$CFG->wwwroot   = 'http://public.domain.com';
$CFG->dirroot   = '/var/www/html/moodle';
$CFG->reverseproxy = true;
//$CFG->sslproxy = true; //UNCOMMENT this line if you are using SSL

注意:如果您没有使用 public 网络服务器的根目录,请确保您使用的目录与 moodle 在子服务器上使用的目录不同。例如,如果 moodle 安装在 /var/html/moodle 的子服务器上,http://public.domain.com/moodle 将失败,因为两个目录是相等的并且由于某种原因代理循环。我对这个问题的简单解决方法是将 moodle 安装移动到 /var/html/moodley,包括 config.php 中的所有必需更改。这解决了我遇到的所有问题。