阿里云
阿里云多端小程序中小企业获客首选
发表主题 回复主题
  • 6287阅读
  • 6回复

[解决方案]用 Nginx+Redis Cache 给 WordPress 提速

级别: 论坛版主
发帖
9349
云币
14165
— 本帖被 linanxiaoxiao 设置为精华(2016-08-03) —
前言 2|>\A.I|=  
KQPu9f9  
.nD#:86M  
目前比较多的 WordPress 的缓存方案都是使用对象缓存插件并对应 Page 缓存来实现提速。但是这样的话我们都是经过 Nginx/Apache —— PHP-FPM/Mod-PHP —— Redis 拓展 —— 对象缓存插件 —— Redis。 这个拓扑图其实还是漫长的,性能受限于 PHP KrpIH6  
而这里我们通过 SRcache模块为缓存提供了一个整合后端存储的能力,可以配合Redis使用.如果Redis访问没命中,则发起一个后端请求,获取到数据之后动缓存到Redis,下次访问将直接调用Redis中的缓存。 vN{@c(=g  
拓补图: Nginx —— SRcache 拓展 —— Redis。 直接跳过 PHP,来获得更快的页面访问速度。 P$obID  
LDjtkD.r  
评价 13s/m&  
">bhxXeiN  
UTkPA2x  
WordPress 比较经典的组合就是 Varnish + Apache/Nginx + Memcached + W3TC。这个组合很经典也很抢单,但槽点就是 Varnish 有一定的学习成本,并且大版本号的升级都会更换语法。 ,0! 2x"Q=  
Nginx+Redis Cache 配置就比较简单,轻轻松松就搞定了。而且配置虚拟主机啥的都不用学习成本,也不会多一个软件来占用你的端口等等。 I`0-q?l  
}YDi/b7  
准备 P1mg;!tq  
)aIcA  
efQ8jO  
首先,我们需要 Redis 和 Nginx 并且配备如下拓展:srcache-nginx-module, redis2-nginx-module, HttpRedisModule 和 set-misc-nginx-module 。如果安装拓展的方法就不介绍了,比较简单粗暴的就是安装 OpenResty ,默认集成哦! |R9Lben',  
检测 Nginx 是否有安装 ,在 SSH 中输入: e#C v*i_<  
  1. nginx -V 2>&1 | grep 'srcache-nginx-module\|redis2-nginx-module\|redis-nginx-module\|set-misc-nginx-module' -o
^ #:;6^Su  
kZw"a*6  
如果返回: gI^&z  
  1. srcache-nginx-module
  2. redis2-nginx-module
  3. redis-nginx-module
  4. set-misc-nginx-module
[font=-apple-system, BlinkMacSystemFont, &amp]那说明就是有我们必须的配置文件了! e"04jd/  
x0<;Rm [u=  
w<9rTHG8,  
配置 LE8<JMB  
aN0[6+KP;  
#kC~qux^  
在虚拟主机配置文件中加入: )7 p" -  
  1. upstream redis {
  2.             server 127.0.0.1:6379;
  3.             keepalive 512;
  4.     }
然后修改一下配置文件,这里我列出我的 Nginx 配置内容供新手参考: _N`.1Dl%Q  
  1. upstream redis {
  2.             server 127.0.0.1:6379;
  3.             keepalive 512;
  4.     }
  5.     
  6. server {
  7. listen 80;
  8. server_name www.mf8.biz;
  9. access_log off;
  10. index index.html index.htm index.php;
  11. include /path/to/wordpress.conf;  # Wordpress 的缓存文件位置
  12. root /data/wwwroot/www.mf8.biz;
  13.     set $skip_cache 0;
  14.     #POST请求直接调用后端
  15.     if ($request_method = POST) {
  16.         set $skip_cache 1;
  17.     }  
  18.     if ($query_string != "") {
  19.         set $skip_cache 1;
  20.     }  
  21.     #不要缓存以下部分
  22.     if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap(_index)?.xml") {
  23.         set $skip_cache 1;
  24.     }  
  25.     #不缓存登陆用户和最近评论的用户
  26.     if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
  27.         set $skip_cache 1;
  28.     }
  29.    location /redis-fetch {
  30.         internal  ;
  31.         set  $redis_key $args;
  32.         redis_pass  redis;
  33.     }
  34.     location /redis-store {
  35.         internal  ;
  36.         set_unescape_uri $key $arg_key ;
  37.         redis2_query set $key $echo_request_body;
  38.         redis2_query expire $key 14400;
  39.         redis2_pass  redis;
  40.     }
  41.     location ~ .*\.(php|php5)?$ {
  42.         set $key "nginx-cache:$scheme$request_method$host$request_uri";
  43.         try_files $uri =404;
  44.         srcache_fetch_skip $skip_cache;
  45.         srcache_store_skip $skip_cache;
  46.         srcache_response_cache_control off;
  47.         set_escape_uri $escaped_key $key;
  48.         srcache_fetch GET /redis-fetch $key;
  49.         srcache_store PUT /redis-store key=$escaped_key;
  50.         more_set_headers 'X-Cache $srcache_fetch_status';
  51.         more_set_headers 'X-Store $srcache_store_status';
  52.       
  53.         #fastcgi_pass remote_php_ip:9000;
  54.         fastcgi_pass unix:/dev/shm/php-cgi.sock;
  55.         fastcgi_index index.php;
  56.         include fastcgi.conf;
  57.     }
  58. location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ {
  59.     expires 30d;
  60.     access_log off;
  61.     }
  62. location ~ .*\.(js|css)?$ {
  63.     expires 7d;
  64.     access_log off;
  65.     }
  66. }
Jp=qPG|  
先 nginx -t 检测一下是否正确,如果错误就根据提示修改到正确,然后重启,service nginx restart r{ R-X3s  
u} mj)Nk  
WordPress 插件 cI2Ps3~"Q  
+dCDk* /m  
因为用这种缓存方式,缓存往往是定死的,也就是说,评论更新了,文章更新了,缓存还是不会自动更新的。因此我们还需要相关插件配合。 & &}_[{fc  
安装 Nginx Helper 插件, ['mpxtG  
& BPYlfB1  
ZsP^<  
GeR#B;{  
hZ45i?%  
V"#0\ |]m  
原创文章转载请注明:转载自 :https://www.mf8.biz/nginx-redis-cache-make-wordpress-fast/ vvxxwZa=O  
[ 此帖被ivmmff在2016-08-03 12:05重新编辑 ]
本帖最近评分记录: 1 条评分 云币 +6
小柒2012 云币 +6 信章鱼 猛加分 2016-08-08
级别: 论坛版主
发帖
16048
云币
8344

只看该作者 沙发  发表于: 2016-08-03
不明觉厉 先顶,后看。
善用阿里云帮助文档。
级别: 论坛版主
发帖
1784
云币
3327

只看该作者 板凳  发表于: 2016-08-03
Wordpress是你最爱啊!
本人不是云栖社区工作人员。
无论您在使用中遇到什么问题,不要出言不逊!谢谢合作!
级别: 论坛版主
发帖
9349
云币
14165
只看该作者 地板  发表于: 2016-08-03
回 2楼(鬼才神兵) 的帖子
因为 github 里,wp 的教程最多
[ 此帖被ivmmff在2016-08-03 12:14重新编辑 ]
级别: 码农
发帖
122
云币
301
只看该作者 4楼 发表于: 2016-08-07
不明觉厉
级别: 论坛版主
发帖
3414
云币
8980

只看该作者 5楼 发表于: 2016-08-08
话说 Nginx+Redis Cache 和 Nginx+Memcache 不一样嘛
级别: 论坛版主
发帖
3414
云币
8980

只看该作者 6楼 发表于: 2016-08-08
话说你的博客 以前不是 Typecho 吗?
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
 
验证问题: 阿里云官网域名是什么? 正确答案:www.aliyun.com
上一个 下一个
      ×
      全新阿里云开发者社区, 去探索开发者的新世界吧!
      一站式的体验,更多的精彩!
      通过下面领域大门,一起探索新的技术世界吧~ (点击图标进入)