WP Super Cache使用全攻略

2009-09-11 0:00 | 来源: 原创 | 作者: Donald | 评论: 63条评论

主题不会用?插件不会设置?博客使用出问题?就上WordPress问答找答案!

WP Super Cache作为一个经典的老牌的并且非常好用有效的插件,一直都是WPer们几乎必装的东西之一。不过好像很多人还是对怎么使用它有点困惑…所以,尽量详尽…

什么是WP Super Cache?

WP Super Cache从你的动态Wordpress Blog中生成静态的html文件。当一个html文件生成后,你的服务器就会用显示这个文件来取代处理相对而言需要更大工作量和更多WordPress PHP脚本的动作。

生成的静态html文件会为你的绝大部分用户服务,除了那些在发表评论后在评论表单中显示的用户详细信息,那些请求由PHP处理。

静态文件会为下列用户显示:
未登录用户。
没有在你的Blog上发表评论的用户。
或没有访问密码保护文章的用户。

99%的访客会由静态html文件服务。 没有看到静态文件的用户也会从中受益,因为那些看到会看到常规WP-Cache缓存文件,所以你的服务器就不会像往常那样忙碌。 这个插件会帮助你的服务器处理当你的某个网页出现在Digg.com或其他社会化网站首页时的访客潮。

如果由于某些原因“超级缓存”无法在你的服务器工作也不必担心。 缓存仍然会继续执行,但是每个请求都需要调用PHP引擎。 在正常情况下,这样还算不错。你的访客不会发现站点打开速度减慢或是任何不同,或发现你的网站正在经受大流量的冲击。 超级缓存html文件会比PHP生成缓存文件更快显示,但是在日常使用中差异并不明显。

如何安装:

首先你应该已经安装Apache mod mime以及mod rewrite模块,并启用WordPress fancy permalinks。 禁用PHP安全模式。 如果上述条件有任何一个缺失或是关闭,你仍然可以使用此插件较慢的WP-Cache部分。
如果你已经安装了WP-Cache插件,请先将它禁用。 编辑wp-config.php文件,确认WP_CACHE定义已删除,并移除wp-content目录下的wp-cache-config.php文件和advanced-cache.php文件。 这些内容会在安装WP-Super-Cache后重新生成。
上传WP-Super-Cache目录到你的插件目录。它会创建一个“wp-content/plugins/wp-super-cache/”目录。
如果你在使用Wordpress MU版本,你需要将插件安装到 “wp-content/mu-plugins/wp-super-cache/”,并将wp-cache.php文件复制到 mu-plugins目录中。
访问你的管理页面中的插件页面,激活“WP Super Cache”。
激活后,访问 “设置” →WP Super Cache,然后启用缓存。 如果你看到错误信息提示,或是空白页面,你可能需要修正它。 查看本文“常见问题”区域获得解决方案。

mod_rewrite规则会自动插入到你的.htaccess文件中。此文件位于你的空间可访问的根目录。 这个文件应该看起来和下面的内容类似:

-----------------.htaccess-----------------
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_METHOD} !=POST
RewriteCond %{QUERY_STRING} !.*=.*
RewriteCond %{HTTP_COOKIE} !^.*(comment_author_|wordpress|wp-postpass_).*$
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{HTTP_user_agent} !^.*(2.0\ MMP|240x320|AvantGo|BlackBerry|Blazer|Cellphone|Danger|DoCoMo|Elaine/3.0|EudoraWeb|hiptop|IEMobile|iPhone|iPod|KYOCERA/WX310K|LG/U990|MIDP-2.0|MMEF20|MOT-V|NetFront|Newt|Nintendo\ Wii|Nitro|Nokia|Opera\ Mini|Palm|Playstation\ Portable|portalmmm|Proxinet|ProxiNet|SHARP-TQ-GX10|Small|SonyEricsson|Symbian\ OS|SymbianOS|TS21i-10|UP.Browser|UP.Link|Windows\ CE|WinWAP).*
RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{HTTP_HOST}/$1/index.html.gz -f
RewriteRule ^(.*) /wp-content/cache/supercache/%{HTTP_HOST}/$1/index.html.gz [L]

RewriteCond %{REQUEST_METHOD} !=POST
RewriteCond %{QUERY_STRING} !.*=.*
RewriteCond %{QUERY_STRING} !.*attachment_id=.*
RewriteCond %{HTTP_COOKIE} !^.*(comment_author_|wordpress|wp-postpass_).*$
RewriteCond %{HTTP_user_agent} !^.*(2.0\ MMP|240x320|AvantGo|BlackBerry|Blazer|Cellphone|Danger|DoCoMo|Elaine/3.0|EudoraWeb|hiptop|IEMobile|iPhone|iPod|KYOCERA/WX310K|LG/U990|MIDP-2.0|MMEF20|MOT-V|NetFront|Newt|Nintendo\ Wii|Nitro|Nokia|Opera\ Mini|Palm|Playstation\ Portable|portalmmm|Proxinet|ProxiNet|SHARP-TQ-GX10|Small|SonyEricsson|Symbian\ OS|SymbianOS|TS21i-10|UP.Browser|UP.Link|Windows\ CE|WinWAP).*
RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{HTTP_HOST}/$1/index.html -f
RewriteRule ^(.*) /wp-content/cache/supercache/%{HTTP_HOST}/$1/index.html [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
-----------------.htaccess-----------------

在你启用这个插件之后,在wp-content/cache/目录下找到.htaccess文件,如果此文件不存在,你需要手动创建。 内容如下:

# BEGIN supercache
<IfModule mod_mime.c>
  <FilesMatch "\.html\.gz$">
    ForceType text/html
    FileETag None
  </FilesMatch>
  AddEncoding gzip .gz
  AddType text/html .gz
</IfModule>
<IfModule mod_deflate.c>
  SetEnvIfNoCase Request_URI \.gz$ no-gzip
</IfModule>
<IfModule mod_headers.c>
  Header set Cache-Control 'max-age=300, must-revalidate'
</IfModule>
<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType text/html A300
</IfModule>

# END supercache

Apache必须设置为允许上述模块工作。 如果当响应匿名访客请求时出现“500 internal error”,你需要调整你的Apache设置。下述设置在我的虚拟主机上有效:

<Directory /home/www/>
AllowOverride All
</Directory>

wp-content目录下的advanced-cache.php调用缓存引擎。 这个文件由插件自动生成。 确认在 include_once() 中的路径正确。

插件设置:

wp-super-cache1

首先是是缓存的状态设置。

ON:WP Cache和Super Cache都启用。没有特殊情况推荐选择这个。

HALF ON: 半开模式,禁用Super Cache,只启用WP-Cache的缓存机制。

OFF: 禁用WP Cache和Super Cache。

Don’t  cache pages for logged in users 勾选则不为已登录用户缓存页面

Proudly tell the world your server is Digg proof! ( place a message in your blog’s footer) 骄傲地告诉世界你的服务器不怕Digg效应!(在你的博客页脚放置一条信息)

Clear all cache files when a post or page is published. (This may significantly slow down saving of posts) 当新文章或页面发布时清除所有缓存文件(这可能会显著降低保存文章速度)

Cache rebuild. Serve a supercache file to anonymous users while a new file is being generated. Recommended for very busy websites with lots of comments. Makes “directly cached pages” and “Lockdown mode” obsolete 缓存重建。 当新文件正在生成时为匿名访客显示一个supercache文件。 推荐有大量评论的非常繁忙的站点启用此特性。 启用它会使“directly cached pages 直接缓存页面”和 “Lockdown mode 锁定模式”失效。

Coarse file locking. You probably don’t need this but it may help if your server is underpowered. Warning! May cause your server to lock up in very rare cases!  粗略文件锁定。 这个功能你可能不需要,不过如果你的服务器性能较低,启用它可能会有所帮助。 警告! 可能在极罕见情况下锁死你的服务器!

wp-super-cache2

Mobile device support 移动设备支持

移动设备支持需要在你的.htaccess文件中添加额外的规则,或者你可以将插件设置为半开模式。请根据页面提示操作。

注意:如果要卸载这个插件,确认服务器wp-content 目录可写以便自动删除 advanced-cache.php和cache-config.php。 (确认这些文件也可写是个好主意!)

wp-super-cache3

卸载时请使用卸载脚本来移除插件创建的文件和目录。 查看Readme.txt获得更多信息。

wp-super-cache4

缓存内容:这里统计已生成和已过期的缓存数量和大小。

Delete Expired 删除过期缓存

Delete Cache 删除全部缓存

wp-super-cache5

过期时间与垃圾收集

过期时间: 3600秒

垃圾收集

如果过期时间设置为大于1800秒(半个小时),垃圾收集动作会每十分钟进行一次,否则就在预设过期时间的10秒后进行清理。

检查和删除过期文件代价高昂,但是把这些文件留在那儿同样不是好办法。 在非常繁忙的站点,你应该将过期时间设置为300秒。 试验使用不同的值并访问这个页面来查看一天里在不同时段生成多少过期文件,如果可能,尽量保证缓存文件数少于500个。

wp-super-cache6

接受文件名和拒绝的URI

不要缓存下列页面类型。 点击链接查看关于每种类型的完整描述。勾选的类型就不会被缓存了。

下部的方框中则是按字串方式控制页面是否要被缓存。 比如如果你的链接包含年份而你不想缓存去年的文章,那么就指定年份,“/2004/” , WP Cache会搜索这个字串是否包含在URI之中,如果是的话则不缓存这个页面。

wp-super-cache7

这是可以被缓存的文件名,即使它们匹配上面设置的拒绝缓存子串也仍将缓存。

wp-super-cache8

拒绝的User Agents

HTTP User Agent header中的字串可以帮助WP-Cache避免缓存机器人,蜘蛛和抓取机器人的请求。 注意如果它们已经存在,Super cache文件仍会被发送到这些类型中。

wp-super-cache9

封锁: 禁用/启用

如果你预见到会有流量高峰到来,可以启用这个功能。 当此功能启用时,在文章上发表的新评论不会刷新缓存静态文件。

wp-super-cache10

修复设置

如果你觉得上面的那些设置已经被你搞乱了,点击Restore Default Configuration可将其恢复到默认状态。

常见问题:

我如何知道博客已被缓存?

查看你的站点的任意页面的源代码。 当某个页面是初次创建,你会在源代码末尾看到这样的文本:“Dynamic page generated in XXXX seconds.” 和“Cached page generated by WP-Super-Cache on YYYY-MM-DD HH:MM:SS”。在刷新时,缓存页面会显示相同的时间戳,所以在检查时请稍等几秒。 如果你启用了压缩功能, 文本“Compression = gzip ”也会添加。 如果禁用了压缩,并且这个页面以静态html方式显示,文本“super cache”会添加在其中。 另一种检查你的缓存页面由PHP脚本处理或是由静态缓存而来的方法是查看HTTP header。 WP-Cache (PHP) 缓存页面会有这样的Header“WP-Super-Cache:WP-Cache”。 你可以使用名为Live HTTP Headers的FireFox扩展来检验header。 同时,你还应该查看位于wp-content/cache/supercache/主机名/ 目录下的静态缓存文件。

为什么WP-Super-Cache比WP-Cache好?

这个插件基于非常棒的WP-Cache插件而来,因此具有那个插件所有的优点。 除此之外,它还创建使每次访问Blog都采用单一格式的每个页面的副本,这样可以使服务器更快响应请求。 它几乎和你在浏览器中保存一个页面并把它上传上去替换你的主页一样快。

评论和其他博客上的动态部分会立即更新吗?

评论会在它们通过审核后立刻显示, 这取决于博客主人的评论策略。 其他页面上的动态元素可能不会更新,除非它们由Javasript,Flash,Java或其他客户端浏览器语言构成。 这个插件会真正创建静态html页面,在这些文件被调用时,没有PHP代码执行。 “Popularity Contest”就是一个在缓存环境下不会工作的插件。 那些为移动设备用户显示不同内容的插件也有可能不会正常工作。

Super Cache的压缩会拖慢我的服务器吗?

不会,相反它还会加快你的服务器速度。 Super Cache文件被压缩和储存时,大负载的压缩动作只会出现一次。 这些文件一般都非常小,发送到访客浏览器上也会比未经压缩的快很多。 其结果是,你的服务器会花费更少的时间在传输上,于是也就会节省CPU时间和带块,并使响应下次请求更快速。

为什么 WP UserOnline,Popularity Contest, WP Postratings 或某个插件在我的博客上不再工作或更新状态了?

WP-Super-Cache插件缓存整个页面,所以有些每次页面调用都需要运行PHP代码的插件就不会正常工作了。 想避免这个问题,这个插件必须使用Javascript或AJAX来更新。 如果这个插件要在页面上显示信息,那么也必须有Javascript请求。

为什么这个插件不默认缓存搜索引擎机器人的请求?

这些机器人一般只访问每个页面一次,如果这个页面并不热门,完全没有必要创建缓存文件并让它在你的服务器上闲置。

为什么不创建我站点上所有页面的缓存文件呢?

同刚才那个问题一样,没有必要缓存没人访问的页面。大量的缓存文件会减慢垃圾收集系统的速度,因为它会尝试检查每个文件。 同时它还可能给主机商带来问题。 当你的服务器遇到磁盘错误问题时可能需要更长的时间来检查文件。 还记得用scandisk或者fsck检查大驱动器时用的时间吗?

一个分类页面取代了我的首页…

很小比例使用下列设置的网站会有这样的问题:
使用静态页面作为首页。
使用 /%category%/%postname%/ 永久链接结构

有时一个分类页面会作为站点首页缓存而取代原有静态页面。 作者无法重现这个问题,但是有个简单的办法可以解决问题,即将插件设置为半开模式。 对一般的访问量来说,你不会发现你站点的速度有什么不同。

问题处理:

如果你安装插件后发现有什么不正常的现象,可以从这些方面进行检查:

服务器是否可写 wp-content 目录?
wp-content目录中是否有wp-cache-config.php 文件?如果没有,复制 wp-super-cache/wp-cache-config-sample.php文件到 wp-content/wp-cache-config.php,并确认 WPCACHEHOME 指向正确的地方。

wp-content目录下是否有advanced-cache.php文件?如果没有,你需要复制 wp-super-cache/advanced-cache.php到 wp-content/ 目录下,编辑这个文件,修改路径使它指向 wp-super-cache 文件夹。

如果页面都没有被缓存,移除 wp-content/advanced-cache.php文件并根据上述要求重新创建它。

确认wp-config.php文件中的这一行内容在 “require_once(ABSPATH.'wp-settings.php');”之前:

define( 'WP_CACHE', true );

试试再次打开 设置 –> WP Super Cache页面斌启用缓存。

看看 wp-content/cache/supercache/目录。有文件夹和文件在里面吗?

你的php error_log 错误记录里有什么信息吗?

如果当super cache安装后你的浏览器一直要求你保存文件而不是显示页面,你必须禁用Super Cache 压缩。 访问 设置-> WP Super Cache页面禁用它。

这个插件在PHP安全模式启用时无法很好地工作。 必须由你的服务器管理员禁用这个功能。

如果页面有时可以被超级缓存而有时没有,其原因可能是你的博客部分访客由 “www”前缀访问而有些不是。如果你在使用老版本的Wordpress,你应该选择安装 Enforce www preference 插件。 最新版本的Wordpress可以重定向它们(你应该一直使用最新版本的Wordpress!)。

在Dreamhost上的个人服务器用户如果遇到有关CPU占用增加的错误,则应该编辑 wp-content/wp-cache-config.php 文件并设置缓存目录到“/tmp/”目录。请参考这里的讨论获得更多信息。

类似“failed to acquire key 0x152b: Permission denied in…”或“Page not cached by WP Super Cache. Could not get mutex lock.” 这样的文件锁定错误表明你可能必须使用文件锁定功能。 编辑 wp-content/wp-cache-config.php 并取消注释“$useflock = ture” 或设置 $semid 为一个不同的值。 你还可以把从管理页面禁用文件锁定作为最后一招使用。

确认服务器可写 cache/wpcachemutex.lock 文件

缓存文件不能放置在NFS或Samba或NAS共享上。 必须将其放置在服务器本地磁盘上。 只有在缓存文件夹在本地机器上时,文件锁定和删除过期文件功能才能正常工作。

如果Wordpress无法找到 wp-cron.php文件,旧缓存文件的垃圾收集特性就无法工作。 如果你的主机名定为127.0.0.1, 可能会阻止垃圾收集特性正常运作。 检查你的 access_log,寻找有关wp-cron.php的条目。 它们是否返回 404(文件没找到)或200 代码?如果返回404或你在哪儿都没有看到wp-cron.php文件,Wordpress可能在错误的地方寻找这个脚本了。 你应该联系你的服务器管理员来修正这个问题,或者在Unix服务器上编辑 /etc/hosts 并移除下面的内容。你的主机名必须设置为外币IP地址。查看http://yoast.com/wp-cron-issues/ 获得更多信息。

127.0.0.1 myhostname.com

一行类似“127.0.0.1 localhost localhost.localdomain” 的内容是可以的。

如果旧页面通过Supercache展示给你的访客,你可能缺少某些Apache模块(如果你没用Apache的话,那就可能是类似功能的东西)。 3个模块是必需的: modmime, modheaders 和mod_expires。 后两个对于确保浏览器能够调用你站点上已存在页面的新版本是非常重要的。

“WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed!”这个错误信息如果出现在每个页面的末尾的话,用你常用的编辑器打开 wp-content/advanced-cache.php文件,看看指向wp-cache-phase1.php的路径是否正确?如果不正确的话缓存引擎就不会调用。

如何卸载WP Super Cache?

编辑你的插件目录中的 wp-super-cache/uninstall.php文件,将 UNINSTALL_WPSUPERCACHE设置为一个非空值。

    define( 'UNINSTALL_WPSUPERCACHE', '1' );

打开你的浏览器并直接调用 wp-content/plugins/wp-super-cache/uninstall.php文件。 你必须登录并确认这个动作。 如果你没有立即删除这个插件,在这个脚本运行之后,请注释掉上面这行 define() 以免其他人运行它。

如何手动卸载:
从wp-config.php文件中移除WP_CACHE定义,内容应该类似这样 define('WP_CACHE', true );
从后台页面清理缓存并从插件页禁用插件
从你的.htaccess文件中移除Super Cache mod_rewrite 规则
移除wp-content/advanced-cache.php和wp-cache-config.php文件
删除 wp-content/cache目录
从你的插件目录中删除wp-super-cache

如果所有办法都失败并且你的网站已不能打开
  1. 从wp-config.php中移除WP_CACHE定义:define( 'WP_CACHE', true );
  2. 移除插件写入.htaccess文件中的规则(请看上面)。
  3. 删除插件文件夹中的wp-super-cache目录
  4. 另外,可选删除 advanced-cache.php, wp-cache-config.php 和在wp-content/目录中的缓存文件夹。
自定义缓存

现在可实现通过 add_cacheaction() 函数hook进缓存进程。

可用三个hook:

  1. 'wpcachegetcookiesvalues' - 修改原WP Cache使用的键。
  2. 'add_cacheaction' - 在phase2运行。 允许一个插件添加WordPress hooks。
  3. 'cacheadminpage' - 在管理页面运行。使用它来修改页面,可能通过添加新的设置选项来实现。

这里还有一个常用WordPress Filter。 使用 "docreatesupercache" filter 来自定义缓存前的检查。 这个filter接受一个参数。 输出WP-Cache的wpcachegetcookies_values() 函数。

WP Super Cache 官方下载页面

WP Super Cache 作者页面

标签: , ,

更多

编辑: Donald

  1. Tadeu 说:

    WPスーパーキャッシュ+ DBのCacheは、完璧な組み合わせです!

  2. 冰剑 说:

    还是觉得有些复杂。。。
    请问怎么检查
    “首先你应该已经安装Apache mod mime以及mod rewrite模块,并启用WordPress fancy permalinks。 禁用PHP安全模式。”

    • Donald 说:

      这个你可以咨询你的主机服务商,一般这些都是会启用的。或者,先安装WP Super Cache并启用,看看插件的提示,它会提示你插件是否正常启用,还是缺什么东西。

  3. 请教一下Donald,我想实现评论发表时,不要整个页面全部更新,可以不?那么该如何设定呢?

  4. 超人 说:

    嗯. 这个确实好用.我之前用过这个插件~

  5. 第三方个 说:

    他们只是头看晕,我直接看得变成白痴他妈了......

  6. ibuffalo 说:

    直接問:wopus主機支持這個插件不?

  7. imengs 说:

    有点晕乎,先用个demo试试

  8. 我发现RewriteCond %{REQUEST_FILENAME} !-f不起作用啊,试了好多次了

  9. Matty 说:

    博主,我刚在我的wordpress上装了这个插件。看了N久你的文章,终于搞明白了点。

    不过有个问题想请问你下,为什么我装了这个插件后。后台和每个页面最上后都有一行
    “ define('WP_CACHE', true); //Added by WP-Cache Manager ”

    看了源码最上面也有一行这个东东。不知道有没什么办法去掉啊,我这方面刚接触不久 不知道要改什么文件

  10. soping 说:

    麻烦的要死的教程,这呀那呀的,真是知识越多越蛋疼...

  11. lenomon 说:

    已装上super cache ,试用!!

  12. 启蒙教育 说:

    好像有点问题!

  13. HeilAsuka 说:

    我小白看不懂啊,墙角画圈去

  14. ailog 说:

    弄得迷迷糊糊,新版本的好像和这个不一样,该更新了。

  15. Maxen 说:

    用了,就是那个mod rewrite没搞定,苦恼....

  16. 阳朔在线 说:

    WP Super Cache 用了,mod_rewrite不大好设置.

  17. kaychen 说:

    有什么插件能支持win主机伪静态啊?

  18. 霜天部落 说:

    这个插件真不错!网站访问速度明显加快!不过里面还有一些配置不是很清楚,也没启用。
    大家可以试试:http://www.frostsky.com

  19. love冥天 说:

    有些复杂啊。。。。。

  20. zhuzhu 说:

    使用后一片空白。。。救救我的网站啊

  21. 建议中文配图

  22. 铁艺 说:

    貌似有点复杂,下载试试看。

  23. flyingxxx 说:

    还不错

  24. 19sole.com 说:

    基本弃用了这个插件。
    东西应该是好东西,但是无法缓存我的内容页面,打开内容页还是蜗牛一般的速度。
    我希望尽快解决这个问题。

    • 办证网 说:

      在固定链接设置成/%year%/%monthnum%/%postname%/,去掉最后一个“/”,加入“.html”再保存更改,再启用插件,这样才能生成静态缓存。

  25. sen 说:

    没有nginx规则

  26. 新乡SEO 说:

    这个插件不错。我喜欢哈哈。

  27. 貔貅 说:

    还是在测试中

  28. 海宁装修 说:

    装修碰到了这样的事情,我该怎么办

  29. llk 说:

    请问我启用后,为啥无法使用搜索咧?

  30. 还可以,就是不太懂

  31. 东西不错 .学习学习

  32. 酷哇网 说:

    太长了啊,看不懂,怎么办。。。。。

  33. 酷哇网 说:

    说的满详细的,不过我真看晕了。。。

  34. 阿布 说:

    能不能共享一个贵站的主题给我,拜谢!!!

  35. medcnseo 说:

    这么多外国人来支持你哦,学习了!wordpress插件用的比较少,这个插件有用呢,很不错!