monolithic kernel

WP Super CacheとWPtouch iPhone Themeを使うためのNginxの設定

ruin » Nginxサーバで、WordPressのプラグインWP Super Cacheを使ってみたという記事を参照すればWP Super Cacheを利用することはできますが、これだけではiPhoneなどからアクセスした場合にもキャッシュが適用され、PC向けのページが表示されてしまいます。

そこで、Nginxの設定を修正してUserAgentがモバイル端末のものであった場合にはキャッシュへ飛ばさないようにNginxの設定を編集してみました。

WP Super Cache側の設定

WP Super Cacheの設定画面でMobile device support using WordPress Mobile Edition.の項目にチェックを入れておきます。

Nginx側の設定

WP Super Cache向けの設定だけを別のファイルに切り出しておくことで、再利用が容易になります。

gzip_static on;
gzip_http_version 1.1;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6]\.";
gzip_vary on;
if (-f $request_filename) {
  break;
}
set $supercache_file '';set $supercache_uri $request_uri;
# POSTの場合キャッシュを無効化
if ($request_method = POST) {
  set $supercache_uri '';
}
# rewriteを利用していない場合キャッシュを無効化if ($query_string) {
  set $supercache_uri '';
}
# ログインしている場合キャッシュを無効化
if ($http_cookie ~* "comment_author_|wordpress|wp-postpass_") {
  set $supercache_uri '';
}
# モバイル端末の場合キャッシュを無効化
if ($http_user_agent ~* "2.0\ 2MMP|240x320|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 $supercache_uri '';
}
# キャッシュファイルのパスを指定
if ($supercache_uri ~ ^(.+)$) {
  set $supercache_file /wp-content/cache/supercache/$http_host$1/index.html;
}
# キャッシュが存在する場合はrewrite
if (-f $document_root$supercache_file) {
  rewrite ^(.*)$ $supercache_file break;
}
# キャッシュが存在しない場合はWordPressに処理を渡す
if (!-e $request_filename) {
  rewrite . /index.php last;
}

設定ファイルを利用する側は、includeディレクティブで設定を読み込むだけで済みます。

server {
  listen 80;
  server_name blog.monoweb.info;
  location / {
    root /home/mono/public_html/blog.monoweb.info;
    index index.php index.html;
    # 用意しておいた設定ファイルを利用
    include /etc/nginx/wordpress_super_cache_params;
  }
  location ~ \.php$ {
    gzip off;
    include /etc/nginx/fastcgi_params;
    fastcgi_pass localhost:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /home/mono/public_html/blog.monoweb.info$fastcgi_script_name;
  }
}