我在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 ......
有谁知道可能会发生什么?
最后我能够解决这个问题,我正在用更大的细节来写这个答案,所以其他有这个问题的人都可以按照我的回答。
首先,我们需要为我们的站点编辑apache2配置:通常,可以在/etc/apache2/sites-enabled
找到指定站点的apache2配置。根据您使用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 webserver,这可以使用命令service apache2 restart
来完成。
现在我们还需要在moodle config.php
文件中编辑一些内容。如果您使用了moodle指南中的默认安装位置,则可以在服务器上的/var/www/html/moodle
上找到此文件,其中包含IP(在本例中为10.10.10.10
)。
在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
注意:如果未在公共Web服务器上使用根目录,请确保不使用moodle在子服务器上使用的目录。例如,如果在http://public.domain.com/moodle
的子服务器上安装了moodle,则/var/html/moodle
将失败,因为两个目录都相同并且代理由于某种原因而循环。我对此问题的轻松解决方法是将moodle安装移至/var/html/moodley
,包括config.php
中所有必需的更改。这解决了我遇到的每一个问题。
解决此问题的最佳方法是将内部主机上的moodle安装移动到Web服务器的根目录。
将您的moodle在10.10.10.10移动到/而不是/ moodle
请注意,如果您将在外部apache上使用SSL(建议使用),您还应该在此行中添加以下内容:
$CFG->sslproxy = true;