启用MediaWiki的File Cache功能,生成静态HTML页面
--James Qi 2008年10月21日 (二) 15:40 (CST)
因为持续受到服务器负载过高的困扰,这几天干脆把内容更新的事情都交给同事去做,我来专心看看如何解决服务器负载的问题,除了自己研究以外,也找公司外面的朋友小许、以前的同事小钱进行了很多咨询。
先是对MediaWiki配置做了一些调整,例如将全文检索关掉、页面计数器关掉,看到还是负载高后又把$wgJobRunRate进一步降低到0.01,好像还有一些效果。
对CDN也进行了一些了解,但CDN基本也都是用Squid,主要解决全国各地访问的问题,我们目前Apache负载高的问题可能还解决不了,这个想法也作罢。
统计了一下,目前Squid的缓存命中率也在70%左右,还正常,但就是剩下的30%就让Apache服务器受不了,今天对Squid的配置文件又进行了一些参数调整,加大了很多参数,希望能将命中率提高到80%甚至90%,这样对后端Apache会好一些。想尝试用Squid的反向代理来做负载均衡,但没有测试成功。
至于小许、小钱怀疑的MySQL问题,暂时也顾不过来。
小钱以前在搜狐工作过,说他们的社区BBS等动态页面也都尽量进行了静态化,否则很难承受绝大的访问量。我们以前只是用了Apache的ReWrite做了一个URL模拟静态化,当然是不能减少负载的。我记得maintenance工具中有一个DumpHTML,可以批量生成整个网站的所有HTML静态页面,但似乎都是分布在多个目录中的.html文件,还不知道如何访问,以为采用后会导致URL改变,就没有继续试用。
今天先拿个已经暂停的网站 http://english.18dao.org/ 来做实验,按照MediaWiki官方网站中的File Cache说明,很快就设置好了文件缓存功能,发现URL没有任何改变,只是从HTML源文件中可以看到是cache的结果,这还是不错的。虽然官方网站的说明中指出File Cache还有一些更新机制方面的欠缺,不如Squid好,但我为了能尽快让后端的Apache负载降下来,就将邮政编码查询、电话区号查询两个内容很固定的网站的文件缓存功能打开了,相当于有File Cache和Squid两级缓存。
人工搜索网站暂时还没有这样尝试,因为用到太多扩展、动态的模板了,File Cache支持不太好,还是就用Squid。
小钱问了我们的服务器配置情况后,建议升级服务器,还要找程序员优化MediaWiki的代码。这些工作以后都是有必要的,逐步来创造条件解决吧。
附在LocalSettings.php中的设置:
$wgUseFileCache = true; /* default: false */ $wgFileCacheDirectory = "$IP/cache"; $wgShowIPinHeader = false;
设置定期更新Cache内容:
$wgCacheEpoch = date( "01000101000000" ); #每世纪零年一月一日零点 $wgCacheEpoch = date( "Y0101000000" ); #每年一月一日零点 $wgCacheEpoch = date( "Ym01000000" ); #每月一日零点 $wgCacheEpoch = date( "Ymd000000" ); #每天零点 $wgCacheEpoch = date( "YmdH0000" ); #每小时整点 $wgCacheEpoch = date( "YmdHi00" ); #每分钟 $wgCacheEpoch = date( "YmdHis" ); #每秒钟
增加一个“刷新”选单(注意:需要设置MediaWiki:Refresh为“刷新”二字):
# add page-refresh tab # $wgHooks['SkinTemplateContentActions'][] = 'wfContentRefreshHook'; function wfContentRefreshHook( &$content_actions ) { global $wgRequest, $wgRequest, $wgTitle; $action = $wgRequest->getText( 'action' ); if ( $wgTitle->getNamespace() != NS_SPECIAL ) { $content_actions['purge'] = array( 'class' => false, 'text' => wfMsg( 'refresh' ), 'href' => $wgTitle->getLocalUrl( 'action=purge' ) ); } return true; }
标签:MediaWiki、File Cache、HTML。 |
相关内容:
|
别名:MediaWiki的文件缓存功能、MediaWiki也可以生产静态页面、让MediaWiki生产HTML页面降低服务器负载。
关于“启用MediaWiki的File Cache功能,生成静态HTML页面”的留言:
留言: --117.85.59.107 2008年12月30日 (三) 20:28 (CST)
James 老师,您好
我看了您这篇教程,在自己的wiki上设置后,并未出现理想效果,顺便说下,我的.htaccess文件里也设置了生成伪静态:
RewriteEngine On RewriteRule ^[^:]*\. - [L] RewriteRule ^[^:]*\/ - [L] RewriteRule ^/*$ /index.php?title=首页 [L,QSA] RewriteRule ^(.+)$ /index.php?title=$1 [L,QSA]尽管再加上您教程上的设置,但我的wiki仍未实现静态化。可是,很奇怪,如果我输
http://www.wxseo.com/首页/却能直接访问,此表示静态化已经完成。
但通过浏览器浏览仍然出现了一大串的字符,并未实现静态化,请问是什么问题?怎么可以解决?
我的wiki小站无锡百科望能指明解决方法。
留言: --58.214.168.215 2009年1月1日 (五) 21:40 (CST)
问题已解决
- 回复:你好!解决了就好,如果以后有问题再交流。--59.173.100.159 2009年1月2日 (六) 21:43 (CST)
新增留言
--123.53.184.110 2009年6月3日 (三) 14:32 (CST)
留言:试过memcache没有? 我在我的医学百科开启了, 效果还有待时间考验.
- 回复:我这里好像没有安装成功MemCache,听说应该是有效的,我主要是用的Squid和File Cache。--James Qi 2009年6月4日 (五) 22:13 (CST)
新增留言
--119.134.179.215 (IP 位置 | 谁是 | 贡献) 2010年4月6日 (二) 09:20 (CST)
留言: 定期更新看不明白,是全部复制下去吗? $wgCacheEpoch = date( "01000101000000" ); #每世纪零年一月一日零点
$wgCacheEpoch = date( "Y0101000000" ); #每年一月一日零点
$wgCacheEpoch = date( "Ym01000000" ); #每月一日零点
$wgCacheEpoch = date( "Ymd000000" ); #每天零点
$wgCacheEpoch = date( "YmdH0000" ); #每小时整点
$wgCacheEpoch = date( "YmdHi00" ); #每分钟
$wgCacheEpoch = date( "YmdHis" ); #每秒钟
还是只复制一条就可以了?
- 回复:您好!根据自己的需要,只要复制一条就可以。--James Qi 2010年4月6日 (二) 13:45 (CST)
新增留言
--116.77.130.114 (IP 位置 | 谁是 | 贡献) 2010年11月2日 (二) 19:46 (CST)
留言:您好,如上启用了缓存后经常大量出现”这个网页出现技术错误“的页面(google居然都收录了)
而且刷新按钮在Vector外关下显示不出,何解?
网站地址:greendamlove.co.cc
我的邮箱zoglun在谷歌邮箱点com
- 回复:您好!不知道是什么具体“技术错误”?1.16下的vector皮肤刷新按钮确实没有了,估计与新皮肤的兼容有问题,除了更换回monobook以外,暂时还没有想到好的办法。1.16版本中还有新的cache机制,我也是刚刚安装新版本,以后再试一试。--James Qi 2010年11月3日 (三) 09:37 (CST)
新增留言
--116.77.137.133 (IP 位置 | 谁是 | 贡献) 2010年11月4日 (四) 12:27 (CST)
留言: 您好,这个网页出现技术错误是因为空间提供商给的数据库占用性能百分比太小,所以经常出错,启用Gzip压缩的缓存(月更新)后已经不再出现了
又有好多问题:
1.那个……1.16没法批量上传图,确定要升级么?(或者说你有办法批量上传么?)
2。现在最新的mediawiki版本到底是几?我怎么还看到1.9.3的中文版本?
3。昨天手滑把主站的数据库回档到2天前了,丢失了十几条条目和十几个文件(文件还在FTP,但是前台看不到了),还有没办法补救呢?不会又要重写一遍吧……
(还是我)
网站地址:greendamlove.co.cc
我的邮箱zoglun在谷歌邮箱点com
- 我以前也没有用过批量上传图片,都是一个一个上传的,好像maintenance下有脚本可以批量上传,但没有用过;
- 2010年7月到现在11月,最新的稳定版本就是1.16.0,MediaWiki各种版本都是多语言支持的,不存在专门的中文版本;
- 十几个条目可能需要人工找回,例如从自己机器上浏览器缓存、搜索引擎快照等,文件如果还在目录下,可以用maintenance下的rebuildImages.php来找回,参看[3]。
- --James Qi 2010年11月4日 (四) 23:57 (CST)
新增留言
--121.11.171.248 (IP 位置 | 谁是 | 贡献) 2010年11月5日 (五) 13:53 (CST)
留言: 抱歉……请问require_once( "$IP/extensions/Purge.php");
插在那里?verctor那个格式很诡异啊
插在VERCTOR。php显示
Warning: require_once(/extensions/Purge.php) [function.require-once]: failed to open stream: No such file or directory in /home/aXXX/public_html/skins/Vector.php on line XXX
插在local里显示
Fatal error: Using $this when not in object context in /home/aXXX/public_html/extensions/Purge.php on line 3
- 回复:您好!那个扩展程序的说明写得太简单了,我也是摸索了半天才基本搞明白。其实那个扩展的Purge.php里面一共只有几行语句有用,我干脆不调用Purge.php那个程序了,直接把Purge.php中的几行代码插入到Vector.php(不是LocalSeetings.php)中就可以,可以放在Vector.php这两部分中间:
if ( $this->mTitle->exists() ) { // Adds history view link $links['actions']['history'] = array( 'class' => 'collapsible ' . ( ($action == 'history') ? 'selected' : false ), 'text' => wfMsg( 'vector-view-history' ), 'href' => $this->mTitle->getLocalUrl( 'action=history' ), 'rel' => 'archives', );
$links['views']['purge'] = array( 'class' => ($action == 'purge') ? 'selected' : false, 'text' => wfMsg( 'purge' ), 'href' => $this->mTitle->getLocalUrl( 'action=purge' ) );
if( $wgUser->isAllowed( 'delete' ) ) { $links['actions']['delete'] = array( 'class' => ($action == 'delete') ? 'selected' : false, 'text' => wfMsg( 'vector-action-delete' ), 'href' => $this->mTitle->getLocalUrl( 'action=delete' ) ); }
- 注意:其中的'actions'是折叠在下拉菜单中的,'views'是直接浏览显示的,可以根据需要进行调整修改,你自己多摸索一下应该就可以了。另外,我今天把本站也升级到1.16了。--James Qi 2010年11月6日 (六) 22:18 (CST)
新增留言
--121.11.171.251 (IP 位置 | 谁是 | 贡献) 2010年11月7日 (日) 00:32 (CST)
留言: 您好?~插入以后会在purge前后出现< > (我没记错的话这是<>的乱码表示)怎么都去不掉。
就算直接插入原作者的代码也去不掉,好郁闷。
改为在MediaWiki:Purge里设置,去掉了乱码了。(但是邮件系统又坏了……真是糟糕)
有个题外话,这些extension很多都有版权限制,像我这站是非商业相同共享也就算了。商业站点是存在一定版权风险的
(当然,在天朝版权基本可以忽略,要先感谢国家呀!)(不过就算不管版权,道德上是有风险的……)
- 回复:您好!那个MediaWiki:Purge设置好了以后就解决了。我看绝大多数extension的版权都与MediaWiki核心平台是一样的,无论非商业网站、商业网站都可以把这些开源软件拿来用,似乎没有特别的限制。--James Qi 2010年11月7日 (日) 21:38 (CST)