带有反向代理的 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/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
中的所有必需更改。这解决了我遇到的所有问题。
我在设置 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/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
中的所有必需更改。这解决了我遇到的所有问题。