WordPressをnginxで利用するための設定例

Ubuntu Server 11.10におけるWordPressをnginxで利用するための設定例をメモとして書いておきます。
WordPressはドキュメントルートの下のwpというディレクトリに配置しています。ただし、コンテンツのURLにはhttp://example.jp/topic/のように/wpを見せないようにしています。コメント等は一切許可していません。
スマートフォン向けの画面を生成するためにWPtouchを利用しています。このため、キャッシュ機能には工夫をしています。

/etc/nginx/nginx.conf

http {
        # 略

        # キャッシュのパスの設定
        fastcgi_cache_path /var/run/nginx/cache levels=1:2 keys_zone=STATIC:20m max_size=20m inactive=24h;

        # 略
}

/etc/nginx/conf.d/wordpress.conf

server {
        # 色々、略

        # キャッシュの制御
        set $nocache '0';

        # WPtouchのために個別のキャッシュするためのキーのプレフィックス
        if ($http_user_agent ~* '(iPhone|iPod|incognito|webmate|Android|dream|CUPCAKE|blackberry9500|blackberry9530|blackberry9520|blackberry9550|blackberry 9800|webOS|s8000|bada|Googlebot-Mobile)') {
                set $wptouch_prefix 'wptouch-mobile.';
        }
        if ($cookie_wptouch_switch_toggle = 'normal') {
                set $wptouch_prefix 'wptouch-normal.';
        }

        # コンテンツのページ(キャッシュする)
        location / {
                if (-e $request_filename) {
                        break;
                }
                rewrite ^.+$  /index.php last;
        }

        # 管理用のページ(キャッシュしない)
        location /wp/ {
                if (-e $request_filename) {
                        break;
                }
                if (-d $request_filename) {
                        break;
                }
                set $nocache '1';
                rewrite ^.+$  /wp/index.php last;
        }

        location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                log_not_found off;
                access_log off;
        }

        # PHPのページをphp-fpmに渡す設定
        location ~ \.php {
                fastcgi_pass    unix:/var/run/php-fpm.sock;
                fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param   PATH_INFO       $fastcgi_script_name;
                include /etc/nginx/fastcgi_params;

                # 動的ページのキャッシュの設定
                fastcgi_cache           STATIC;
                fastcgi_cache_key       "$wptouch_prefix$host$request_uri";
                fastcgi_cache_valid     200 10m;
                fastcgi_cache_valid     404 1m;
                fastcgi_cache_bypass    $nocache;
                fastcgi_no_cache        $nocache;
        }

        location = /favicon.ico {
                log_not_found off;
                access_log off;
        }

        location = /robots.txt {
                log_not_found off;
                access_log off;
        }

        location ~ /\. {
                deny all;
                log_not_found off;
                access_log off;
        }
}