很多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中取查看。