WordPress.com でやってるメモブログの方にも書いたんですが、WordPress プラグイン WPtouch を使用しているサイトで Nginx リバースプロキシを利用する際の Tips です。
あっちの方に書いたのは、ほんとにメモ程度なんでコードだけで分かりにくいかなぁと思いまして、こっちで詳細に説明します。
WPTouch や Ktai Style なんかを使ってクライアントのユーザーエージェント(UA)ごとに表示を変えている場合、Nginx でリバースプロキシを使用すると具合が良くありません。
普通に設定した場合、同一URLへのアクセスがあった際は UA に関係なくキャッシュされてしまいます。
この辺を回避するために、Nginx の設定ファイルで UA を判断して proxy_cache_key を変更するってのは、わりかし良く行われている作戦だと思います。
参照: WordPress サイトに nginx を導入する : dogmap.jp
ですが、これだと WP Touch にある Mobile Thema を ON/OFF するボタンに対応できません。
そんで、どうするかと言うと…
nginx.conf にこんな感じで書けば良いんじゃないの?っていうわけです。
server { listen 80; server_name example.com; location /wp-admin { proxy_pass http://backend; } location ~ .*\.php { proxy_pass http://backend; } location / { set $mobile ""; if ($http_user_agent ~* '(DoCoMo|J-PHONE|Vodafone|MOT-|UP\.Browser|DDIPOCKET|ASTEL|PDXGW|Palmscape|Xiino|sharp pda browser|Windows CE|L-mode|WILLCOM|SoftBank|Semulator|Vemulator|J-EMULATOR|emobile|mixi-mobile-converter|PSP)') { set $mobile "@ktai"; } if ($http_user_agent ~* '(iPhone|iPod|Opera Mini|Android.*Mobile|NetFront|BlackBerry)') { set $mobile "@mobile"; } if ($http_cookie ~* "wptouch(_switch_cookie=normal|-pro-view=desktop)") { set $mobile "@mobile.off"; } if ($http_cookie ~* "comment_author_|wordpress_(?!test_cookie)|wp-postpass_" ) { set $do_not_cache 1; } proxy_no_cache $do_not_cache; proxy_cache_bypass $do_not_cache; proxy_cache czone; proxy_cache_key "$scheme://$host$request_uri$is_args$args$mobile"; proxy_cache_valid 200 301 302 10m; proxy_cache_valid 404 5m; proxy_pass http://backend; } }
WPTouch (および WPTouch Pro) では、Mobile テーマと、通常のテーマのどちらを表示するかは COOKIE に wptouch_switch_cookie (または wptouch-pro-view) というキーで保持しています。
この値を見て、通常テーマが選択されている場合は proxy_cache_key を変更してやろうという寸法です。
とりあえず FireFox の User Agent Switcher 使って見てみた限りは、うまいこと動いてるようです。
ピンバック: さくらVPS 1GにNginxとPHP-FPMをいれてWordPressブログを作ったメモ | ninxit.blog
ピンバック: さくらのVPSでWordPressを動かそう – 番外編 - - UKLab