很多wordpress博客都是用apach作为前端代理,但是随着nginx的普及,有越来越多的wordpress 博客使用nginx作为前端代理,当用nginx作为前端代理的时候要给wordpress配置wp_super_cache 就需要好好配置一下nginx。本问主要说一下如何在使用nginx作为前端代理的wordpress中使用 wp_super_cache插件。 1.要使用wp_super_cache就要首先保证nginx添加了rewrite规则。现在我首先配置下如何实现wordpress 的伪静态,在nginx安装目录下的conf中有nginx.conf文件,这个文件为nginx的配置文件,我们 在该文件中加入伪静态的rewrite规则,在location / 中加入代码,加完后如下图 location / { root iaccepted.net; index index.php index.html index.htm; #上面为原先就存在的 if (-f $request_filename/index.html){ rewrite (.*) $1/index.html break; } if (-f $request_filename/index.php) { rewrite (.*) $1/index.php; } if (!-f $request_filename){ rewrite (.*) /index.php; } #下面为以前就存在的 } 然后在wordpress后台设置中,固定链接设置,直接设置固定链接格式,比如:/%category%/%postname%.html 然后访问所有页面的时候就会在域名后显示成/分类/文章名.html,就实现了wordpress的伪静态。注意这个时候 只是伪静态,所有的文件其实还是有php-fpm动态加载之后传回来的,但是表面上看是静态页面。 2.安装wp_super_cache插件来实现静态页面(真正的静态页面) 首先正常的安装wp_super_cache插件,并在后台插件管理->wp_super_cache->高级 中进行如下设置: 勾选 “启用缓存以变加快访问。” 勾选 “mod_rewrite缓存模式。” 勾选 “缓存重建以。当新缓存生成时调用缓存文件给匿名用户。” 勾选 “Mobile device support.” 也就“是移动设备支持” 勾选 “当有新文章或页面的发布或更新时清楚之前的缓存文件。” 勾选 “当页面有新评论时,只刷新该页面缓存。” 由于垃圾收集器检查缓存并对过期缓存的重建过程非常耗费内存,建议直接把缓存超时时间设为0,这样就能禁用垃圾收集器 从而不会耗费太多内存,然后可以设置每天某个时间点清空缓存。 ok了,这样wp_super_cache就安装成功了,但是现在并不能使用缓存文件。接下来要修改nginx的配置文件来 构造rewrite规则。编辑nginx.cof 在server {} 中添加如下代码(代码中我已经加入了每行程序的解释): #设置缓存 #是否缓存 set $supercache 1; set $cache_uri $request_uri; #是否是移动端 set $ifmobile ''; #如果是post请求,默认不从缓存读取 if ($request_method = POST) { set $supercache 0; } #如果请求参数不为空,则不存缓存读取 if ($query_string != "") { set $supercache 0; } #后台的一些操作不从缓存读取 if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { set $supercache 0; } #看下是否为移动端发来的请求,以区分缓存内容,因为尺寸不一样 if ($http_user_agent ~* '(iphone|ipod|aspen|incognito|webmate|android|dream|cupcake|froyo|blackberry9500|blackberry9520|blackberry9530|blackberry9550|blackberry 9800|webos|s8000|bada)') { set $ifmobile '-mobile'; } #如果不从缓存读取,那么就设置缓存的uri为空 if ($supercache = 0) { set $cache_uri ''; } #如果使用缓存,就要拼装出缓存路径 if ($cache_uri ~ ^(.+)$) { set $cache_file /wp-content/cache/supercache/$http_host$1/index${ifmobile}.html; } #rewrite,若存在该缓存文件,则直接静态读取,并结束下面的一系列匹配 if (-f $document_root$cache_file) { rewrite ^ $cache_file last; } ok,这个样之后nginx重新加载配置文件,就完成了缓存的设置。 这个时候我们访问我们的博客时,就会生成相应页面的静态缓存也面。具体可以到wp-content/cache/supercache中取查看。 (责任编辑:最模板) |