前面写了几篇与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_remoteip(Apache 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来实现。
先记录到这里,后面有更多内容再补充记录。
评论