8wired

とりあえずやってみるブログ

NginxでWPtouch(Ver. 3)の高速化

2016/07/07

 Wordpressでインストールするだけで簡単にスマホページを作ってくれるプラグイン「WPtouch」のメジャー・バージョンアップ(Ver. 3)に伴って、WPtouchの端末判定の方法が変更になっていたのでNginxの設定を見直してみました。WPtouch Ver. 3.1.8を対象としていますが、Ver. 3.1.1から同様の処理で問題ないと思います。

 WPtouchの端末判定は、core/mobile-user-agents.phpの$wptouch_smartphone_listの設定を元に行われているようなので、この振り分けをNginxで行っていくことになります。

4
5
6
7
8
9
10
11
12
13
14
15
16
global $wptouch_smartphone_list;
$wptouch_smartphone_list = array(
        array( 'iPhone', 'Mobile' ),
        array( 'iPod', 'Mobile' ),
        array( 'Android', 'Mobile' ),
        array( 'BB', 'Mobile Safari' ),
        array( 'BlackBerry', 'Mobile Safari' ),
        array( 'IEMobile/10.0', 'Touch' ),
        array( 'Firefox', 'Mobile' ),
        'IEMobile/7.0',
        'IEMobile/9.0',
        'webOS'
);

 NginxでWordPressのスマホページを高速化してみるからの設定変更で、6~23行目の部分が対象になります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
set $pattern '';
if ($http_user_agent ~* '(iPhone.*Mobile|iPod.*Mobile|Android.*Mobile|Firefox.*Mobile)') {
    set $pattern 2;
}
if ($http_user_agent ~* '(BlackBerry|BB|IEMobile|WebOS|Googlebot-Mobile|AdsBot-Google)') {
    set $do_not_cache 1;
}
if ($http_cookie ~* 'wptouch-pro-view=desktop') {
    set $pattern 3;
}
if ($request_uri ~* '\?wptouch_switch=(mobile|desktop)') {
    set $do_not_cache 1;
}
if ($http_cookie ~* "comment_author_|wordpress_(?!test_cookie)|wp-postpass_" ) {
    set $do_not_cache 1;
}

 2~4行目でiPhone/iPod/Android/Firefox端末の判定しています。これらの端末でUser AgentにMobileが入ってない端末はPC端末として処理されるので、入っている端末だけを対象とします。

 5~7行目は一部を除いてWPtouchでスマホ表示される端末の判定ですが、アクセス件数がほとんどない端末なので除外しています。またGooglebot Mobile等についてはWPtouchでスマホ表示されますが、余計なキャッシュを作らないよう除外しています。

 8~13行目はスマホ端末でPC表示を選択した場合の判定です。以前のバージョンから判定方法が変更されているので、それに合わせて設定します。

 上記以外の部分については以前の設定のまま利用しています。

スポンサードリンク

Last-Modifiedを送信している場合には注意

 WordpressでLast-Modifiedを送信している場合、スマホ表示⇔PC表示の切り替えがうまく行われない場合があります。これはクライアントからのリクエストに対してNginxが304を返してクライアント自身のキャッシュが利用されてしまうために発生します。表示がうまく切り替わらない場合には、Last-Modifiedを送信していないか確認してみるとよいかもしれません。

-WordPress
-,