当前位置

MediaWiki网站接入CDN

James Qi 在 2021年5月30日 - 23:26 提交

前面写了几篇与CDN相关的博客:CloudFlare百度云加速Drupal,还有我们的MediaWiki网站也尝试接入了CDN,所以也来记录一下。

首页,MediaWiki官方网站上这篇说明:Manual:CloudFlare是必须看的,全面介绍了MediaWiki接入CloudFlare需要注意的事项,包括优点和限制、安装和配置、匿名用户真实IP、缓存清理、参考资料链接等。

我们发现的一些问题和处理办法:

1、LocalSettings.php中的修改:

MediaWiki 1.2 至 1.34之前的版本:

$wgUseSquid = true;
$wgSquidMaxage = 86400;
$wgSquidServers = array(//百度云加速部分IP段
  '59.51.81.128-191',
  '61.182.137.0/25',
  '42.236.93.0/24',
  '58.211.2.0/24',
  '117.34.13.0/24',
  '112.25.90.0/24',
  '119.188.9.0/24',
  '115.231.186.0/25',
  '125.39.239.0/24',
  '113.207.101.0/25',
  '111.32.135.0/25',
  '183.61.177.0/24',
  '183.61.236.0/24',
  '42.81.6.0/25',
  '220.170.185.160/27',
  '157.255.24.160/27',
  '122.190.2.160/27',
);
$wgSquidServersNoPurge = array('127.0.0.1');

1.34之后的版本:

$wgUseCdn = true;
$wgCdnMaxAge = 86400;
$wgCdnServersNoPurge = array(//百度云加速部分IP段
  '59.51.81.128-191',
  '61.182.137.0/25',
  '42.236.93.0/24',
  '58.211.2.0/24',
  '117.34.13.0/24',
  '112.25.90.0/24',
  '119.188.9.0/24',
  '115.231.186.0/25',
  '125.39.239.0/24',
  '113.207.101.0/25',
  '111.32.135.0/25',
  '183.61.177.0/24',
  '183.61.236.0/24',
  '42.81.6.0/25',
  '220.170.185.160/27',
  '157.255.24.160/27',
  '122.190.2.160/27',
);

2、用户真实IP,我们先是通过修改LocalSettings.php,加入对$_SERVER中传值的判断:

if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) {
    $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP'];
} elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
}

这个办法可以实现获取真实IP,但有安全隐患,也不是很规范,后来尝试在Apache安装mod_cloudflare后就可以不用这样设置了,但这个模块对其它CDN(例如百度云加速)无效,就改为了在Apache安装mod_remoteipApache 2.4是直接启用mod_remoteip,我们现在的Apache 2.2是下载mod_remoteip-httpd22安装)

3、html页面不缓存的问题:

在百度云加速中设置了规则来缓存HTML页面却发现无效,百度云加速对于Cache-Control中的no-cache, private, max-age=0等标签是遵守的,所以不缓存。

我们在CloudFlare中设置了规则来缓存HTML页面,就发现可以生效,很可能是因为默认情况下,规则中的“源站控制缓存设置”是关闭了,CloudFlare的设置覆盖了源站缓存设置。

要想让百度云加速也缓存html,我们尝试了一个不规范但可以马上有效的办法:修改includes/OutputPage.php,替换掉原来的private等设置就可以,以后也许还会尝试出来更规范、合理的办法。

4、编辑不影响用户浏览:

我们采用了与Drupal类似的策略,为编辑者设置一个单独的二级域名,使用与源站域名相同的数据库等设置,这样内部编辑人员看到的内容不会被缓存,也不影响普通用户浏览了。

5、缓存清理:

目前还是靠CDN后来来清理,以后会做点开发,在合适的时候和地方调用CDN清理缓存的API来实现。

先记录到这里,后面有更多内容再补充记录。

添加新评论

Plain text

  • 不允许使用HTML标签。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。