WPTouch テーマ切替

WPTouch と Nginx リバースプロキシ

WPTouch テーマ切替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 使って見てみた限りは、うまいこと動いてるようです。

2 thoughts on “WPTouch と Nginx リバースプロキシ

  1. ピンバック: さくらVPS 1GにNginxとPHP-FPMをいれてWordPressブログを作ったメモ | ninxit.blog

  2. ピンバック: さくらのVPSでWordPressを動かそう – 番外編 - - UKLab

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください