解决 moodle 内外网同时访问问题(较完美)

解决 moodle 内外网同时访问问题(较完美)

发布时间:2013-08-13 浏览数:833
  • 摘要:Moodle v2.4.x 新版比 v1.9.x 旧版改进了诸多内容,不过即使是官网最新的 V2.4.3+ 版,也未能解决内外网同时访问的问题。在网上百度了下,方法多种,不过以讹传讹,均不能完美解决实际问题。 网上的基本思路差不多一样, 都是通过修改 Moodle 安装文件夹下的....

    Moodle v2.4.x 新版比 v1.9.x 旧版改进了诸多内容,不过即使是官网最新的 V2.4.3+ 版,也未能解决内外网同时访问的问题。在网上百度了下,方法多种,不过以讹传讹,均不能完美解决实际问题。

      网上的基本思路差不多一样, 都是通过修改 Moodle 安装文件夹下的 config.php 文件,找到$CFG->wwwroot = 'http://xxx.xxx.xxx.xxx',将之修改为让系统自动判定访问路径,号称完美解决问题。如其中一种方法:将$CFG->wwwroot = 'http://xxx.xxx.xxx.xxx'; 修改为:$CFG->wwwroot = 'http://'.$_SERVER['HTTP_HOST']; 即可。如果有下级目录的话修改为:$CFG->wwwroot = 'http://'.$_SERVER['HTTP_HOST'].'/moodle'; 从而让系统自动判定访问路径。这种实现方法较简单,但我试了多回却不能自动判定访问路径。还有种方法是在 config.php 里添加了个判断路径的函数语句(具体方法略,感兴趣的可找度娘),不过同样不能完美解决实际问题。

      前面几种方法,始作俑者自己可能是成功的,但为什么我们照这些方法来做却大都失效呢,因为大家各自内外网的配置环境不同。最主要的原因,网上也有讨论说是因为 Moodle 采用的是绝对路径机制,而内网、外网访问时,前者用的是内网 IP 地址,后者用的是公网 IP 地址,两者不一致,导致一个好访问了,另一个肯定不好访问。那 Moodle 为什么不采用动态相对路径机制呢,唉,据说因为 Moodle 的代码太多了(150万行以上),调整修改起来太麻烦,于是这个问题拖到现在都没解决。

      那么到底有没有解决方法呢?针对目前 Moodle 采用绝对路径这一特性,要让内、外网不同的 IP 地址都指向同一服务器,那么可以通过域名解析来解决。如何实现?下面通过一个案例来说明:


      假设某校内部 Moodle 服务器 IP 地址为:172.16.3.2,该校公网固定 IP 地址为:1.2.3.4,该校有公网域名 abc.cn,访问 Moodle 网站的网址为:http://moodle.abc.cn:888(为什么不使用默认的80端口?假设该校80端口另有用途)。

      1、解析 moodle.abc.cn 指向该校公网固定 IP 地址:1.2.3.4。(不会做的找 DNS 服务商解决)
      2、防火墙上做目的地址转换:任意地址访问公网IP地址1.2.3.4(端口888),则将公网IP地址1.2.3.4(端口888)转换为路由器(或代理服务器)的外IP地址172.16.1.2(端口888)。
      3、在路由器(或代理服务器)上做端口映射: 将路由器外IP地址172.16.1.2的888端口,解析到内网 Moodle 服务器IP地址172.16.3.2的888端口,TCP协议。
      4、修改 Moodle 安装文件夹下的 config.php 文件,找到$CFG->wwwroot = 'http://xxx.xxx.xxx.xxx';,将之修改为:$CFG->wwwroot = 'http://moodle.abc.cn:888';。(或者在初始化 Moodle 时设置)
      5、修改 Apache 配置文件 httpd.conf,将 Listen 80 改成 Listen 888,将 ServerName localhost:80 改成 ServerName localhost:888。(如果你本来就用默认的80端口访问则不必修改)
      6、在客户机上修改 hosts 文件,添加一句:172.16.3.2 moodle.abc.cn。(如果你有内网 DNS 服务器,则在其上建立 abc.cn 域,做主机名 moodle 解析到 172.16.3.2 即可。)
      7、Moodle 服务需要重启下。则内外网同时用“http://moodle.abc.cn:888”访问 Moodle 网站一切OK!

      如果你没有申请公网域名,只要有公网 IP 地址,照样可用上述方法,只是外网用户要参照上述第6条,修改下 hosts 文件,添加一句如:1.2.3.4 moodle.abc.cn,将指定域名解析到公网 IP 地址即可。

      PS:有人或许会问,既然防火墙及路由器作了公网IP到内网IP的地址转换和端口映射,那第6条不是多余的么,内网用户不是直接可以用域名访问Moodle服务器的么?的确,理论上这样是可以的。但这样做,内网用户访问Moodle服务器的路径非常繁杂:先由路由器(或代理服务器)出防火墙解析域名得到公网IP地址,再经防火墙及路由器作公网IP到内网IP的地址转换和端口映射,才访问到内网Moodle服务器;回程时,则由内网Moodle服务器,经路由器(或代理服务器)到达防火墙,再由防火墙经路由器(或代理服务器)才能到达内网用户。这一切,哪有内网用户通过修改hosts或内网DNS解析,直接访问内网Moodle服务器来得方便快捷得多啊!

      用域名来访问 Moodle 网站的好处还在于,万一你公网或内网IP有变,只要在域名解析上稍作改变即可,非常方便!

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值