WordPress Nginx proxy cache integratorというプラグインの働きは?
ご利用のブラウザは、JavaScript が無効 となっていませんか?
このサイトでは、コンテンツの一部が非表示 、あるいは、コメント、お問い合わせの投稿ができない 、検索ができない ことがあります。
「Nginx をリバースプロキシ(キャッシュ) として使ってみた 」では、nginx をリバースプロキシサーバーとして使ってみました。
「Nginxのproxyでキャッシュを削除する方法 」では、nginx のキャッシュを削除する方法について解説してみました。
今回は、WordPress Nginx proxy cache integrator というプラグインです。
ダウンロード先 : http://wordpress.org/extend/plugins/nginx-proxy-cache-integrator/
直訳すれば、
WordPressのNginx proxy cacheの集配器?
・・・こんな感じ?ですかね。
Nginx proxy cache:Nginxのリバースプロキシのキャッシュ機能のこと。
つまり、キャッシュをコントロールしますよ・・・みたいな感じですかね。
このプラグインは、キャッシュを削除してくれるのでしょうか?
答え:キャッシュを削除してくれない。
では、このプラグインって何をするんでしょうね。
WordPress Nginx proxy cache integratorは何をしているのか?
解説(readme.txt)の英文を読めば概ねわかります。
This plugin handles the wordpress/php side of a statically cached nginx-fronted wordpress (or wordpress mu) site.
It makes WordPress emit an “X-Accel-Expires: 0” header when a user is logged in or has taken actions that should cause them to get a customized page on your frontend.
This – along with the nginx configuration below – will ensure logged-in users aren’t impacted by your static nginx cache.
これを英訳してみます。
このプラグインは、Nginxで提供しているWordpress ( あるいは WordPress mu ) サイトが、静的なキャッシュを行うことをWordpress/PHPで制御します。
それは、ユーザがログインしているか、あるいは、カスタマイズされたページ情報を取得しようとしたとき、ヘッダ情報として“X-Accel-Expires: 0” をWordpressにて発行することで制御します。
これは、 – 以下のnginxの設定と共に – ログインしたユーザーが静的なnginxのキャッシュの影響を受けないようにします。
つまり、
ログインしてたり、コメント書いていたりしてたら、キャッシュしないように“X-Accel-Expires: 0” を発行しますよ。
という感じですね。
“X-Accel-Expires: 0” は、何を意味するかというと、
Nginxでは、ヘッダ情報としてこの情報を受信した場合、キャッシュの寿命を動的に設定することができます。
ここで設定している数値部分がキャッシュの寿命を意味します。
ここでは0 が設定されていますから、寿命が0でキャッシュされないという意味になります。
このプラグインのソースコードを見てみましょう。
非常にシンプルなので、わかりやすいと思います。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function add_xaccel_header( ) {
# Set the X-Accel-Expires header to never cache the page if it looks like the page needs to be tailored for a user.
$user_cookie_there = false ;
foreach ( $_COOKIE as $key => $value ) {
if ( preg_match ( '/wordpress_(?!test_cookie)|comment_author|wp-postpass/' , $key ) ) {
$user_cookie_there = true ;
}
}
if ( $user_cookie_there ) {
header ( "X-Accel-Expires: 0" ) ;
}
}
add_action( 'init' , 'add_xaccel_header' ) ;
5行目が肝心要の肝ですね。
要は、クッキー情報にWordpressに関する情報が設定されているか確認しています。
この設定は、「Nginx をリバースプロキシ(キャッシュ) として使ってみた 」の設定の中でも同じことをやってます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
location / {
set $do_not_cache 0;
if ($http_cookie ~* "comment_author_|wordpress_(?!test_cookie)|wp-postpass_" ) {
set $do_not_cache 1;
}
if ($http_user_agent ~* “2.0\ 2MMP|240×320|400X240|AvantGo|BlackBerry|Blazer|Cellphone|Danger|DoCoMo|Elaine/3.0|EudoraWeb|Googlebot-Mobile|hiptop|IEMobile|KYOCERA/WX310K|LG/U990|MIDP-2.|MMEF20|MOT-V|NetFront|Newt|Nintendo\ Wii|Nitro|Nokia|Opera\ Mini|Palm|PlayStation\ Portable|portalmmm|Proxinet|ProxiNet|SHARP-TQ-GX10|SHG-i900|Small|SonyEricsson|Symbian\ OS|SymbianOS|TS21i-10|UP.Browser|UP.Link|webOS|Windows\ CE|WinWAP|YahooSeeker/M1A1-R2D2|iPhone|iPod|Android|BlackBerry9530|LG-TU915\ Obigo|LGE\ VX|webOS|Nokia5800″) {
set $do_not_cache 1;
}
proxy_no_cache $do_not_cache;
proxy_cache_bypass $do_not_cache;
proxy_pass http://$host.backend;
proxy_cache_key $scheme://$host$request_uri$is_args$args;
proxy_cache cache_domain1.com;
}
このnginx.confの設定の6行目ですね。
ほぼ同じです。(意味は全く同じと思って良いでしょうね)
つまり、
nginx.confの設定を、「Nginx をリバースプロキシ(キャッシュ) として使ってみた 」の設定と同じようにやっているなら、このプラグインは必要ありませんね。
nginx.confの設定でやりたくない方は、このプラグインを使うことで同じことができます。
携帯の条件も同じようにこのプラグインを多少いじってやれば実現できると思います。
WordPressのプラグインでキャッシュコントロールしたい場合には、おもしろいかもしれませんね。
でも、nginx.confの設定の方が早いような気もしますが、いかがでしょうか!?
このプラグインだけ使っても、思ったとおりに動作しないですね。(みや さんのコメント参照)
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用 となっていませんか?
このサイトでは、コンテンツの一部が非表示 、あるいは、コメント、お問い合わせの投稿ができない 、検索ができない ことがあります。
関連記事 :
2011年10月19日, 7:10 PM
こんにちは。リバースプロキシ側でキャッシュしちゃうと根本的にWPにリクエストが飛ばないので、このプラグインだけではどっちにしろnginxでCookieの有無を判別させる必要があるような気がします。^^
2011年10月20日, 1:21 AM
みや さん、コメントありがとうございます。
管理人です。
おっしゃるとおり結局nginxでCookieの有無を判別させる必要がありますね。どうもご指摘ありがとうございました。