通過 OpenResty + Redis 高效緩存 WordPress

介紹

這個教程,我認為最大的特色就是不用 Super WP Cache、W3TC 這里的插件來實現緩存,而是最大化利用云服務器的特性,將傳統的頁面緩存丟入對象緩存實現加速的鏈: Nginx/Apache —— PHP-FPM/Mod-PHP —— WP緩存插件 —— 生成緩存 —— PHP-Redis 拓展 —— Redis —— 內存 縮短到: OpenResty —— Nginx SRcache 拓展 —— Redis —— 內存,直接跳過 PHP,提高效率避免瓶頸。 更多內容請參考:《用 Nginx+Redis Cache 給 WordPress 提速》

因為我們一開始就選擇了 OpenResty 作為 Web 軟件,所以簡單粗暴,直接設置虛擬主機就行。

必備步驟:安裝并設置以Unix Socket 運行的 Redis-Server

設置

上接《Ubuntu 下 WordPress 安裝教程》

這里以域名:www.mf8.biz,虛擬主機文件:/usr/local/openresty/nginx/conf/vhost/ 為例。

修改 /usr/local/openresty/nginx/conf/vhost/:

在最最開頭加入:

復制代碼

upstream redis {

server 127.0.0.1:6379;

keepalive 512;

}

然后,加入 Redis 緩存的設置內容,可以添加在 root /data/wwwroot/mf8; 后,

復制代碼

set $skip_cache 0;

#POST請求直接調用后端

if ($request_method = POST) {

set $skip_cache 1;

}

if ($query_string != "") {

set $skip_cache 1;

}

#不要緩存以下部分

if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap(_index)?.xml") {

set $skip_cache 1;

}

#不緩存登陸用戶和最近評論的用戶

if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {

set $skip_cache 1;

}

location /redis-fetch {

internal??;

set??$redis_key $args;

redis_pass??redis;

}

location /redis-store {

internal??;

set_unescape_uri $key $arg_key ;

redis2_query set $key $echo_request_body;

redis2_query expire $key 14400;

redis2_pass??redis;

}

并修改反代 PHP-FPM 部分:

復制代碼

location ~ [^/]\.php(/|$) {

set $key "nginx-cache:$scheme$request_method$host$request_uri";

try_files $uri =404;

srcache_fetch_skip $skip_cache;

srcache_store_skip $skip_cache;

srcache_response_cache_control off;

set_escape_uri $escaped_key $key;

srcache_fetch GET /redis-fetch $key;

srcache_store PUT /redis-store key=$escaped_key;

more_set_headers 'X-Cache $srcache_fetch_status';

more_set_headers 'X-Store $srcache_store_status';

#PHP版本號有出入的別弄錯了

fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;

fastcgi_index index.php;

include fastcgi.conf;

fastcgi_param PHP_VALUE "open_basedir=$document_root:/tmp/:/proc/";

}

如果覺得還有點繞,這里是一份完整配置文件可以參考:

復制代碼

https://gist.github.com/ivmm/80e4b2baff4573a2af54af149bc1cb72

插件

首先,感謝這個方法有rtCamp提出,并為緩存刷新清理的問題提供了解決插件 ——Nginx Helper插件。

因為用這種緩存方式呢,緩存往往是定死的,也就是說,評論更新了,文章更新了,緩存還是不會自動更新的。所以我們需要 Nginx Helper 插件。

搜索 或者 下載并上傳Nginx Helper插件,并進行如下設置:

然后就可以開心的看網站的速度,咻咻咻了。通過瀏覽器開發者工具,看到 HIT 說明緩存已經命中。

原文鏈接

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 轉載地址:http://gnucto.blog.51cto.com/3391516/998509 Redis與Me...
    Ddaidai閱讀 21,468評論 0 82
  • 1.1 資料 ,最好的入門小冊子,可以先于一切文檔之前看,免費。 作者Antirez的博客,Antirez維護的R...
    JefferyLcm閱讀 17,120評論 1 51
  • 1. 使用redis有哪些好處? 速度快,因為數據存在內存中,類似于HashMap,HashMap的優勢就是查找和...
    零一間閱讀 61,861評論 3 7
  • (1)什么是redis? Redis 是一個基于內存的高性能key-value數據庫。 (有空再補充,有理解錯誤或...
    走過路過_97c2閱讀 710評論 0 1
  • 學習教練標識有那么幾個階段: 初識陌生,從理論層面理解。比如:“同時對客戶作為人的整體性和想在教練中實現什么做出回...
    大喵教練百問閱讀 371評論 0 2