麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > CMS > Wordpress > 正文

WordPress緩存插件wp-super-cache的nginx rewrite規則

2024-09-07 00:51:51
字體:
來源:轉載
供稿:網友

本文我們來介紹WordPress緩存插件wp-super-cache在nginx下如何配置rewrite規則,后面補充了WP Super Cache的介紹,實現WordPress提交評論的時刪除該頁面的WP-Super-Cache緩存的方法.

WordPress的緩沖插件wp-super-cache默認支持apahce的緩沖方式,在生成了靜態頁面數據后,通過.htaccess的規則直接讓apache讀取靜態文件,完全不經過PHP,可以很大的提高博客的頁面性能.

但是Nginx的改寫規則就沒這么容易讓代碼來配置了,雖然wp-super-cache的第二種緩存方式就是為這種使用環境設計,但實際上是用了PHP來提供靜態數據了,在使用apache benchmark壓力的時候,php-cgi依然占很高的CPU占有率.

通過編寫nginx的rewrite規則還是可以讓nginx直接讀取靜態文件,參考來自Code Exchange: nginx rewrite rules for WordPress + WP Super Cache,這里的配置被很多地方引用過,但實際嘗試使用過程看到那里面的代碼還需要微調.

  1. server { 
  2.         listen          80; 
  3.         server_name     apt-blog.net;  
  4.         root    /var/www/pt-sites/wordpress; 
  5.         index   index.html index.htm index.php; 
  6.         location / { 
  7.                 # enable search for precompressed files ending in .gz 
  8.                 # nginx needs to be complied using ?-with-http_gzip_static_module 
  9.                 # for this to work, comment out if using nginx from aptitude 
  10.                 gzip_static on; 
  11.  
  12. if the requested file exists, return it immediately 
  13.                 if (-f $request_filename) { 
  14.                         break
  15.                 } 
  16.  
  17. set $supercache_file ''
  18.                 set $supercache_uri $request_uri
  19.  
  20. if ($request_method = POST) { 
  21.                         set $supercache_uri ''
  22.                 } 
  23.  
  24. # Using pretty permalinks, so bypass the cache for any query string 
  25.                 if ($query_string) { 
  26.                         set $supercache_uri ''
  27.                 } 
  28.  
  29. if ($http_cookie ~* "comment_author_|wordpress|wp-postpass_" ) { 
  30.                         set $supercache_uri ''
  31.                 } 
  32.  
  33. # !!!! IMPORTANT 
  34.                 # if we haven't bypassed the cache, specify our supercache file 
  35.                 if ($supercache_uri ~ ^(.+)$) { 
  36.                         set $supercache_file /wp-content/cache/supercache/$http_host/$1/index.html; 
  37.                 } 
  38.  
  39. # only rewrite to the supercache file if it actually exists 
  40.                 if (-f $document_root$supercache_file) { 
  41.                         rewrite ^(.*)$ $supercache_file break
  42.                 } 
  43.  
  44. # all other requests go to Wordpress 
  45.                 if (!-e $request_filename) { 
  46.                         rewrite ^(.*)$ /index.php?q=$1 last; 
  47.                 }  //Vevb.com 
  48.  
  49.         location ~ /.php$ { 
  50.               include        fastcgi_params; 
  51.               fastcgi_pass   127.0.0.1:9000; 
  52.               fastcgi_index  index.php; 
  53.               fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name
  54.         } 
  55.     } 

需要重點關注的是set $supercache_uri這一行,這里的路徑是wp-super-cache生成靜態文件的路徑,配置文件起作用的時候,這個路徑會和$document_root組成最終靜態文件的絕對路徑,最終輸出文件,所以如果這個路徑不對的話,最終還是交給了index.php,緩沖就不起作用了.

wp-super-cache在wordpress目錄/wp-content/cache/supercache/$http_host/下生成了各個請求url的目錄,目錄下是一個index.html靜態文件,可以在wordpress工作時候,在這個目錄下用命令watch find觀察(在緩沖不多的情況下),總之小心的把這個路徑寫好,因為估計每個博客的permanent link的樣式都不一樣,wp-super-cache生成的目錄也不一樣,需要仔細調試一下.

當然這里的規則并沒有安全包含了wp-super-cache 插件的功能,比如識別手機客戶端之類的,如果需要還得仔細根據插件生成的.htaccess規則來添加到nginx。

完成后用apache benchmark壓一下,Request per second應該很容易上百,而且php-cgi應該不會出現在top的列表前面了,CPU應該集中在nginx的子進程上,而且都是個位數CPU占有率,系統的load非常低。

Tips:發現測試結果不對時,可以嘗試刪除/wp-content/cache整個目錄,讓wp重新生成所有緩沖.

順便說一下,如果僅使用ab測試壓力,用不著安裝整個apache2,只需要apt-get install apache2-utils.

WordPress緩存插件:WP Super Cache

WP Super Cache 的基本介紹:WP Super Cache 是 WordPress 官方開發人員 Donncha 開發,是當前最高效也是最靈活的 WordPress 靜態緩存插件,它把整個網頁直接生成 HTML 文件,這樣 Apache 就不用解析 PHP 腳本,通過使用這個插件,能使得你的 WordPress 博客將顯著的提速.

WP Super Cache 的緩存機制

WP Super Cache 緩存機制有兩種,WP Cache 和 Super Cache。

WP Cache 緩存時,會在你的“wordpress 安裝文件夾/wp-content/cache/”文件夾下生成一系列wp-cache-xxxxxx.html格式的文件,Super Cache 緩存時,則在你的“wordpress 安裝文件夾/wp-content/cache/supercache/”文件夾下生成對應每一篇文章或者標簽等的目錄,名稱為xxx.html,取決于你的文章ID是怎么設置,目錄下面就是靜態的 index.html 文件.

當你一個訪問者來的你的站點,他沒有登入或者也沒有留言,這樣他得到是一個在 WordPress cache 文件夾下的 supercache 子文件夾下的純靜態文件,其實你都可以自己到上面的 supercache 目錄下去查看同樣的永久鏈接的 HTML 文件的備份.

判斷一個頁面是否已經被緩存了,查看該頁面的源代碼,如果訪問者已經登陸或者留了言,就會返回 WP Cache 函數生成的頁面,并且最后一行會有“Cached page generated by WP-Super-Cache+緩存時間”這行字,就像下面這行代碼一樣:

<!-- Cached page generated by WP-Super-Cache on 2011-02-25 15:57:24 -->

而 Super Cache 緩存會多一行如下代碼:

<!-- super cache -->

因為 Super Cache 是真正靜態的,對搜索引擎和博客的速度非常有好處,而且有效的減輕了 php 和 Mysql 的查詢壓力,這點對于大型博客來說優勢很明顯,一般的較小的博客感覺就不怎么明顯.

WP-Super-Cache 的使用設置

WP-Super-Cache 啟用前的準備工作

①前提是固定鏈接不可用默認的,上傳WP-Super-Cache插件,不要急著啟用。

②賦予以下權限:

給wp-super-cache文件夾添加寫權限。

給wp-content文件夾添加寫權限。

在wp-content文件夾下新建cache文件夾并添加寫權限。

③在網站根目錄wp-config.php文件中

先檢查是否有下面這段代碼:

define('WP_CACHE',true);//Added by WP-Cache Manager

如果沒有則在define(‘DB_NAME’的上一行(也就是添加在wp-config.php文件中語句的最前面) 添加如下代碼:

define('WP_CACHE',true);//Added by WP-Cache Manager

然后啟用插件,一般已經可以去設置了,如果還出錯再接著下面步驟.

④看wp-content目錄下面有沒有有wp-cache-config.php這個文件,如果沒有,直接把插件包里面的wp-cache-config-sample.php改名為wp-cache-config.php傳到wp-content目錄.

⑤再看wp-content目錄里面有沒有advanced-cache.php這個文件,如果沒有,同樣把插件包里面的wp-cache-phase1.php文件改名為advanced-cache.php同樣傳到wp-content目錄.

⑥最后一步在wp-content目錄下面建一個cache文件夾,再在cache文件夾下新建一個supercache文件夾.

⑦查看網站底部源代碼,如果有類似下面的文字則說明沒有開啟成功,繼續修改:

<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->

⑧查看網站底部源代碼,有類似下面的文字則說明開啟成功.

  1. <!-- Dynamic page generated in 2.703 seconds. --> 
  2.  
  3. <!-- Cached page generated by WP-Super-Cache on 2010-11-23 11:44:28 --> 
  4.  
  5. <!-- super cache --> 

注:更改了網站文件后要進入“Tester&contents”選項點擊“刪除過期文件”“刪除緩存”.

WP-Super-Cache 的設置

1.“Easy”:勾選“Caching On (Recommended)”,點擊“更新狀態”.

2.“高級選項”:(額外附加以下選項).

勾選“Compress pages so they’re served more quickly to visitors.”(開啟gzip)

勾選“Don’t cache pages for known users.”不對認識的人使用緩存(比如登錄者或發表評論者)

過期時限:0秒,0表示不啟用,但當有新文章發表時、新評論時,仍可自動更新緩存.

“Preload”那里勾選“Preload mode”

3.“Preload”:勾選“Preload mode ”

:其它所有選項默認即可。

WP-Super-Cache 完全刪除的方法

①在后臺禁用此插件。

②刪除/wp-content/plugins/目錄的wp-super-cache目錄。

③刪除wp-content目錄下面的cache目錄。

④刪除wp-content目錄下面的wp-config.php,advanced-cache.php兩個文件。

⑤修改wp-config.php,把這一行刪掉:define(‘WP_CACHE’,‘true’);

⑥如果主機本來是用.htaccess文件的要改回來(網站根目錄與wp-content/cache都有)

實現WordPress提交評論的時刪除該頁面的WP-Super-Cache緩存的方法.

lnmp環境下的WordPress使用WP-Super-Cache插件,若要開啟mod_rewrite 緩存模式,需要在nginx里面加入一些特定的規則,具體請見舊文:《nginx下wp super cache的mod_rewrite規則》。

用過WP-Super-Cache插件的應該都知道,在高級設置里面有一項【當某頁面有新評論時,只刷新該頁面的緩存】的功能,從字面上來說,就是當有人在某篇文章發起評論時,將刪除該頁面的緩存。

但是,經過我仔細測試發現,這個功能在我的博客并沒有生效,個人猜測失敗的原因可能是使用了ajax無刷新評論導致的。也就是采用ajax評論的方式,可能無法觸發WP-Super-Cache的刪除機制,從而導致這個功能的失效!總之,不管怎么樣,反正在我的博客失效了,現在就要想辦法解決這個問題。

既然你不行,那就我來,簡單的加上幾句并不高端的PHP代碼后,就實現了這個功能,編輯主題下的comments-ajax.php文件,啟用ajax評論的博客才有,找到如下代碼:

  1. do_action('pre_comment_on_post', $comment_post_ID); 
  2.  
  3. do_action('pre_comment_on_post', $comment_post_ID); 

然后,在這行代碼之后添加刪除緩存代碼,保存即可.

  1. //有人評論將自動刪除已存在緩存 
  2. $post_data = get_post($post->ID, ARRAY_A); 
  3. $slug = $post_data['post_name']; 
  4. $cache_s = WP_CONTENT_DIR."/cache/supercache/".$_SERVER['SERVER_NAME']."/".$post->ID.".html/index.html"
  5. $cache_sd = WP_CONTENT_DIR."/cache/supercache/".$_SERVER['SERVER_NAME']."/".$post->ID.".html"
  6. $cache_p = WP_CONTENT_DIR."/cache/supercache/".$_SERVER['SERVER_NAME']."/".$slug."/index.html"
  7. $cache_pd = WP_CONTENT_DIR."/cache/supercache/".$_SERVER['SERVER_NAME']."/".$slug
  8. if (file_exists($cache_s)) { 
  9.     unlink($cache_s); 
  10.     rmdir($cache_sd); 
  11.  } 
  12. if (file_exists($cache_p)) { 
  13.     unlink($cache_p); 
  14.     rmdir($cache_pd); 
  15.     } 
  16.  
  17. //有人評論將自動刪除已存在緩存 
  18. $post_data = get_post($post->ID, ARRAY_A); 
  19. $slug = $post_data['post_name']; 
  20. $cache_s = WP_CONTENT_DIR."/cache/supercache/".$_SERVER['SERVER_NAME']."/".$post->ID.".html/index.html"
  21. $cache_sd = WP_CONTENT_DIR."/cache/supercache/".$_SERVER['SERVER_NAME']."/".$post->ID.".html"
  22. $cache_p = WP_CONTENT_DIR."/cache/supercache/".$_SERVER['SERVER_NAME']."/".$slug."/index.html"
  23. $cache_pd = WP_CONTENT_DIR."/cache/supercache/".$_SERVER['SERVER_NAME']."/".$slug
  24. if (file_exists($cache_s)) { 
  25.     unlink($cache_s); 
  26.     rmdir($cache_sd); 
  27.  } 
  28. if (file_exists($cache_p)) { 
  29.     unlink($cache_p); 
  30.     rmdir($cache_pd); 
  31.     } 

現在有人提交評論時,將會判斷是否存在該頁緩存,如果存在就刪除,從而實現了我要的功能,本來想用 is_page() 和 is_single()來判斷頁面內容,從而簡化代碼的,可惜不生效,至少用上面的笨方法了,反正能實現就可以了.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美成人精品一区二区 | 欧美成年视频 | 久久精品国产久精国产 | 亚洲特黄a级毛片在线播放 久久久入口 | 亚洲精品 欧美 | 爱看久久 | 国产91精品欧美 | 91色一区二区三区 | 黄色网电影| 18pao国产成人免费视频 | 羞羞视频免费视频欧美 | 久久精品影视 | 午夜精品久久久久久久爽 | 亚洲精品成人久久久 | 高清成人在线 | 成人毛片在线免费看 | 亚洲一区二区中文字幕在线观看 | 羞羞电影在线观看 | 久久人人av| 国产精品久久久久久影视 | 亚洲一区二区三区四区精品 | 精品亚洲一区二区三区 | 欧美视频在线一区二区三区 | 毛片大全在线观看 | 一区二区三区视频在线观看 | 精品国产精品久久 | 日韩每日更新 | 热久久成人 | 国内精品久久久久久久久久久久 | av电影网站在线观看 | 视频一区二区在线观看 | 精品一区二区三区不卡 | 天天操很很操 | 日韩激情 | 久久久久久久.comav | 蜜桃免费在线 | 日本教室三级在线看 | 午夜在线视频一区二区三区 | 国产精品自拍啪啪 | 国产一区二区三区四区五区加勒比 | xp123精品视频 |