本帖最後由 sure15 於 2013-6-5 20:41 編輯 0 @7 N4 h9 a4 V7 }) L9 e
& {$ u( J& X% V* e7 [9 D. @首先:利用rewrite規則,實現從nginx層面訪問wp super cache生成的靜態網頁,繞過PHP。location / {
0 ~7 F" k! f) g* ~ # 如果請求的文件已存在,直接返回6 x {! D( o4 w( ~' g2 f: I4 y
if (-f $request_filename) {& ~9 v, n+ i( T" p
break;
% ^. J! a( D" @4 g e7 z }
4 s! D1 E3 h/ S! R% J8 j set $supercache_file '';
, ~/ F7 r+ d% N' J# N/ y) m set $supercache_uri $request_uri;( @' q4 d$ T3 \. y
set $supercache 1;' t# k% X* U1 {' N# E# e
set $ihttp_host '';. {. `2 C# p, E, E/ J5 E* [% q
8 f7 h# V% O: o& M' _2 a if ($request_method = POST) {, }* t: H& ~/ ?
set $supercache 0;
7 l9 ]5 T$ ?$ q& n; S }
. Z0 i Z2 E Q9 [& H, [7 N N3 q0 ~- N/ o; k: y2 J- ^8 F7 M
# 僅在訪問文章永久鏈接時使用靜態文件,請求中帶參數則不使用靜態緩存
# S; {9 N/ q: H6 B, q; w. ?! O O set $qs 0;6 S0 c5 A6 z# P3 `! K" O
if ($query_string) {( D0 E* \9 `6 R1 W/ i) X
set $qs 1;$ i1 Y8 N% m' l
}
! _/ P3 B' E: X) ^# S
8 }* M" C9 `5 D. v+ O # 不過從 twitter, facebook, feedburner 鏈接點過來的,總是帶參數,這些訪問仍然可以使用靜態文件; N6 V. p2 v; Q/ b4 r9 T3 O A
if ($query_string ~* "^utm_source=([^&]+)&utm_medium([^&]+)&utm_campaign=([^&]+)(&utm_content=([^&]+))?$") {. R6 o( S1 Z) X k8 X# }( q
set $qs 0;
0 O! U" U2 H/ [& F# {! _9 P3 @ set $supercache_uri $document_uri;1 B7 T; {5 W9 o/ H% q8 I
}
L! |. W% z ]1 s; Z8 h W #deactivate on high load% a- \* _7 K8 w& ]1 G" @! ], p
if ($qs = 1) {
1 I, E% g5 B7 {9 x set $supercache 0;* D9 x# T& \- u- X
}% ^+ k% w1 `# n( k0 U" K
# 針對已登錄用戶(發表過評論),可以不靜態化。在訪問量高峰時可註釋掉5 C7 } `: h# x6 x3 m2 W0 {
if ($http_cookie ~* "comment_author_|wordpress|wp-postpass_" ) {
% A/ S2 a3 D# [, l$ X% Z0 G set $supercache 0;) D5 x+ W7 [! H+ o
}
- R) D/ L9 x* t; M+ I @7 y- c
. }7 I3 y8 w3 a5 d- W # 支持移動設備,訪問移動版本的網頁緩存) n- v( _2 x% \; Y
if ($http_user_agent ~* '(iphone|ipod|aspen|incognito|webmate|android|dream|cupcake|froyo|blackberry9500|blackberry9520|blackberry9530|blackberry9550|blackberry 9800|webos|s8000|bada)') {6 g% H# V5 |% s2 S
set $ihttp_host '-mobile'; z' _& Z) ?2 r& e7 g
} @% I7 T) D' y- a" o. A
2 J" _" P/ t1 S1 R# n+ i& P # 指定靜態緩存文件的路徑- w2 m6 y0 e; G
if ($supercache = 0) {2 ?5 S, |9 C9 M1 F( D2 x# p
set $supercache_uri '';
( Q: |( Y* E" [/ c0 d. s1 c }
( W* r5 G \$ J# _- I if ($supercache_uri ~ ^(.+)$) {
$ v5 P6 c j. H G% `* s set $supercache_file /wp-content/cache/supercache/$http_host$1/index${ihttp_host}.html;8 @ o2 I/ w6 s) t/ v6 C& W
}
6 b0 r5 V0 f8 |2 ~& R
; |4 K1 V+ u/ |) l # 只有當緩存文件存在時,才進行 rewrite
! }+ {; ]5 C& r8 V if (-f $document_root$supercache_file) {; Q U2 q0 T; F, R* W
#rewrite ^(.*)$ $supercache_file break;1 ^; w- U( W; e: H
rewrite ^ $supercache_file last;
. ?0 D1 p2 d- N) R q/ L5 N }0 @0 d% W. s: c; t8 N0 ~
+ ]) j [- m3 }/ t
# 所有其他請求,轉給 wordpress 處理
, o0 i; G/ r% o& Z5 i if (!-e $request_filename) {7 \4 m P3 B( A8 v8 O) ? ~
rewrite . /index.php last;
& ^5 `/ e) B1 P9 | }
; G3 A3 B! H* P o8 e0 X}( g" h+ h0 O/ g
9 i' ~5 n9 R7 b) T- }, W
用上面這段規則代替wordpress的規則,即wordpress.conf,或者自己建一個conf,再添加到vhost的conf文件中。 0 }( _7 Z9 d7 g" q
然後: 5 ?: n, L5 x& X/ L: A
會出現這個頁面,不要管,沒事。/ T+ A( J+ U5 q8 W5 c S
x1 } b9 ]6 o1 M: M Z
「當某頁面有新評論時,只刷新該頁面的緩存。」這個選擇。2 A! P$ M2 X! @8 K \1 ^ R
「當有新文章或頁面的發佈或更新時清除之前的緩存文件。」這個選擇,每次你發新文章時會生成新的緩存文件。選擇上去。
- J7 T1 F2 P. P1 T/ J/ G/ j* D「緩存重建」和「移動設備支持」可以選擇。
4 z, D' \1 a& j2 q; j. U其它的設置可以自己慢慢摸索。- l% M1 d- R9 s+ {5 q
+ G4 u2 H* Q2 o. e& p; e, H) J8 {% \ N( |2 P- h7 ^7 j6 V0 x2 b
; g4 Z; M b) i' M; k, O
* a3 _+ I; [# b
2 e& i: h+ \7 J; i% N/ S* k2 G
. n7 s. t4 V6 U9 H: v2 H' o- }1 M* X |