阿里云
发表主题 回复主题
  • 878阅读
  • 2回复

WP 使用 FastCGI Cache 实现高效页面缓存

级别: 论坛版主
发帖
9086
云币
12721
— 本帖被 不靠谱贝贝 设置为精华(2017-05-09) —
P=}l.R*1G  
&v]xYb)+<  
f:8!@,I  
前言 qi@Nz=t#HJ  
E7$ aT^  
\ $TM=Ykj  
页面缓存(Page Cache)是 WordPress 性能优化比较重要的一环,目前 WP 有很多页面缓存插件:W3 Total Cache、WP Super Cache、Comet Cache 等,不过它们都是 务器软件 —— PHP —— WP缓存插件 —— 本地或对象缓存,差不多要经过四个阶段,在高并发下效率是很低的。 ,M]W_\N~E  
+ $M<ck?Bo  
D8k >f ]  
而目前比较流行的就是 服务软件 —— FastCGI Cache 或者 服务器软件 —— SRcache 拓展 —— 对象缓存,跳过 PHP 以提高效率。 后者的教程:《用 Nginx+Redis Cache 给 WordPress 提速》 N8T.Ye N  
"'+/ax[{  
)[99SM   
从效率上讲两个方式是没有差别的,这篇文章 也证明了这一点,不过我认为连接 Redis,有需要经过 TCP/IP 并且 Redis 的执行也有一定损益,所以我更中意于前者。 *k\ ;G?  
&OvA[<qT  
原理 oVl:g:K40  
ht\_YiDg3  
UnDX .W*2  
Nginx 内置 FastCGI 缓存,讲缓存结果置放到 tmpfs 内存中去,就可以极大的提高效率和处理时间。不过 FastCGI 缓存不能动清除缓存,当文章需要变动或者产生新评论时就会尴尬了,因此还需要搭配 ngx_cache_purge 拓展,搭配 Nginx Helper 插件以避免前面所说的尴尬。 BD$Lf,_  
ZkibfVwe  
教程 >xRUw5jN  
4[Ko|  
 zW?=^bE  
U4"&T,'lTL  
安装 Nginx ngx_cache_purge 模块 R<3 -!p1v  
Yl1l$[A$  
  1. #下载 ngx_cache_purge
  2. git clone https://github.com/FRiCKLE/ngx_cache_purge.git
  3. #重新编译 Nginx
  4. ./configure ···你的参数···  .   --add-module=/path/to/ngx_cache_purge-2.3
U+-;(Fh~  
^Ux.s Q  
ramdisk 9qq6P!  
F.Bij8\  
B&(/,.  
将 FastCGI_cache 内容 放置在 /var/run 中挂载为 ramdisk,当然了如果网站内容很多,那么内存也一定要大。 *>GRU8_}  
一般来说,/var/run 的大小是总内存的 20%,例如一个 4G 内存的机器,可用容量为 794 M M)v='O<H8  
引用
root@mf8.biz:~# free -m 2L.6!THG  
             total       used       free     shared    buffers     cached }Oe4wEYN)  
Mem:          3965       1443       2521        100        160        687 =OrVaZ0  
-/+ buffers/cache:        595       3370 xyV7MW\?w  
Swap:            0          0          0 {rF9[S"h  
y2B'0l  
root@mf8.biz:~# df -h /var/run eOb)uIF  
Filesystem      Size  Used Avail Use% Mounted on p`"Ic2xPJ  
tmpfs           794M  352K  793M   1% /run
H.Z<T{y;  
'v(b^x<ZS  
P#:nXc$  
修改 Nginx 虚拟主机配置 ASSe;+yp  
kK&AK2  
1O2V!?P  
一、在 server{} 前添加: ;b|=osyT\  
  1. fastcgi_cache_path /var/run/nginx-cache levels=1:2 keys_zone=WORDPRESS:100m inactive=60m;
  2. fastcgi_cache_key "$scheme$request_method$host$request_uri";
  3. fastcgi_cache_use_stale error timeout invalid_header http_500;
  4. fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
.8|"@  
LCSJIt  
二、然后在 server{} 内添加: 7?y([i\y  
  1. set $skip_cache 0;
  2. if ($request_method = POST) {
  3.     set $skip_cache 1;
  4.     }
  5. if ($query_string != "") {
  6.     set $skip_cache 1;
  7.     }
  8. if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap(_index)?.xml") {
  9.     set $skip_cache 1;
  10.     }
  11. if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
  12.     set $skip_cache 1;
  13.     }
  14.     
  15. location ~ /purge(/.*) {
  16.     allow 127.0.0.1;
  17.     deny all;
  18.     fastcgi_cache_purge WORDPRESS "$scheme$request_method$host$1";
  19.     }
+}g6X6m  
msq2/sS~  
I!Fd~g9I4  
三、在 location ~ [^/]\.php(/|$) { 段中添加: `Gg,oCQg  
  1. fastcgi_cache_bypass $skip_cache;
  2. fastcgi_no_cache $skip_cache;
  3. fastcgi_cache WORDPRESS;
  4. fastcgi_cache_valid  60m;
2%-/}'G*  
R,l*@3Q  
[t?:CgI)E  
!W b Q9o  
i66/2BUh.  
WP设置 3my_Gp  
XS>( Bu  
一、在 wp-config.php 中添加:
  1. define( 'RT_WP_NGINX_HELPER_CACHE_PATH','/var/cache/nginx-cache');
5',&8  
K;R!>p}t  
二、安装 Nginx Helper 插件 `{ \)Wuw  
三、按下图设置,其他默认即可: ^_=bssaOd  
8wCB}qC  
Jn\>S z(96  
[ 此帖被ivmmff在2017-05-09 13:42重新编辑 ]
QQ:1251205255,仅提供付费服务。
级别: 技术砖家
发帖
938
云币
624
只看该作者 沙发  发表于: 05-09
动态网页有效吗,比如有会员登录的情况下
级别: 论坛版主
发帖
9086
云币
12721
只看该作者 板凳  发表于: 05-09
回 1楼(一如繁星) 的帖子
部分需要频繁读取数据库的肯定不会被缓存,一些需要读取数据库但是不是经常被修改的就会缓存在内存
QQ:1251205255,仅提供付费服务。
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
批量上传需要先选择文件,再选择上传
 
验证问题: ECS是阿里云提供的什么服务? 正确答案:云服务器
上一个 下一个