WordPress的Super Cache插件通过缓存页面的方式极大提高服务器响应,降低服务器负载。Super Cache依赖permalinks功能的开启,而permalinks又依赖Apache服务器的mod_rewrite模块。因为原生不支持,所以在Nginx下安装Super Cache优化WordPress性能需要全程手动,是件很繁琐的事情。
首先和在Apache平台下一样,在后台设置,打开permalinks,安装并开启Super Cache插件,开启过程中需要修改wp-config.php文件,加入一句:
define('WP_CACHE', true);
在Apache下Wordpress开启permalinks时会生成一个.htaccess文件,自动或者手动写入rewrite规则,内容如下:
RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]
Nginx没有.htaccess文件,所以要通过在配置文件中写入重定向规则实现。在/etc/nginx下创建文件wp-super-cache文件,写入以下内容
# enable search for precompressed files ending in .gz # nginx needs to be complied using –-with-http_gzip_static_module # for this to work, comment out if using nginx from aptitude gzip_static on; # if the requested file exists, return it immediately if (-f $request_filename) { break; } set $supercache_file ''; set $supercache_uri $request_uri; if ($request_method = POST) { set $supercache_uri ''; } # Using pretty permalinks, so bypass the cache for any query string if ($query_string) { set $supercache_uri ''; } if ($http_cookie ~* "comment_author_|wordpress|wp-postpass_" ) { set $supercache_uri ''; } # if we haven't bypassed the cache, specify our supercache file if ($supercache_uri ~ ^(.+)$) { set $supercache_file /wp-content/cache/supercache/$http_host/$1index.html; } # only rewrite to the supercache file if it actually exists if (-f $document_root$supercache_file) { rewrite ^(.*)$ $supercache_file break; } # all other requests go to Wordpress if (!-e $request_filename) { rewrite . /index.php last; }
这里假设wordpress的安装目录是/。然后打开文件/etc/nginx/site-enabled/default,在location /区块代码中加入include wp-super-cache;一句,加好的代码如下:
location / { #如果出现404,请检查此级或者更高一级server代码块中root标记是否正确 #...other stuffs... include wp-super-cache; }
以上工作完成了permalinks需要的路径重写,但是由于WordPress代码会检查mod_rewrite模块是否存在,如果不存在,permalinks访问路径中会包含index.php,比如原来访问/post-123,现在会变成/index.php/post-123,也就是不会完全开启permalinks。这会给Super Cache开启造成问题,所以需要修改代码,找一个开启的plugin,在其中源文件中加入代码:
add_filter( 'got_rewrite', '__return_true', 999 );
我是加在了wp-content/plugins/wp-super-cache/wp-cache.php的最后一行。做完这些后去WP后台删除已有的缓存文件,访问任何页面,打开页面源代码,检查是否存在Super Cache提示信息,信息看起来像下面这个样子:
<!-- Dynamic page generated in 0.156 seconds. --> <!-- Cached page generated by WP-Super-Cache on 2012-09-21 06:09:29 -->
如果存在,恭喜你,Super Cahce已经在nginx平台上的WordPress中成功运行。Tip:在调试过程中,可以借助Super Cache的debug功能,很快发现问题。
没有评论:
发表评论