「NginxのFastCGIキャッシュ」を導入して「1127倍」まで高速化する──「WordPress“1000倍”高速化」チューニング総仕上げとにかく速いWordPress(10)(1/2 ページ)

エンタープライズ用途での利用が増えている「WordPress」の高速化チューニングテクニックを解説する本連載。今回は、「1000倍高速化」を目指すチューニングテクニックの総仕上げです。「NginxのFastCGIキャッシュを導入」して、約1127倍まで高速化します。

» 2016年05月16日 05時00分 公開
[中村けん牛プライム・ストラテジー]

連載バックナンバー

 前回は、WordPressのプラグイン「WP SiteManager」を用いたページキャッシュを導入して、チューニングをしない初期状態から「約228倍」までWordPressを高速化できました。

 今回は、「WordPress1000倍高速化チューニング」の総仕上げを行います。「NginxのFastCGIキャッシュ」を導入して、「約1127倍」までチューニングしていきましょう。

photo WordPressの日本語ローカルサイト

 まず、本テクニックはこれまで解説してきたチューニングの続きとなるので、この記事からご覧の方は、連載バックナンバーから、「約228倍」まで高速化チューニングをしておいてください。

チューニング内容 ページのロード時間
(デフォルト環境比)
1秒当たりの同時アクセス数
「Requests per second」(デフォルト環境比)
デフォルト環境 176ms 11.24
APCの導入
 チューニング方法をおさらい
70ms(約251%) 29.20
OPcache+APCuを導入
 チューニング方法をおさらい
66ms(約266%) 30.51
MariaDBの設定を調整
 チューニング方法をおさらい
64ms(約275%) 31.82
翻訳アクセラレータを導入(キャッシュ)
 チューニング方法をおさらい
53ms(約332%) 39.29
翻訳アクセラレータを導入(翻訳を停止)
 チューニング方法をおさらい
36ms(約488%) 56.78
gzip圧縮を用いる
 チューニング方法をおさらい
35ms(約502%)
Tunedの調整
 チューニング方法をおさらい
34ms(約517%) 58.47
event MPM+php-fpm構成に変更
 チューニング方法をおさらい
33ms(約537%) 60.79
PHP 5.6+OPCache+APCuを導入
 チューニング方法をおさらい
32ms(約550%) 61.84(約550.2%)
PHP 7+OPCache+APCuを導入
 チューニング方法をおさらい
18ms(約977.7%) 148.08(約1250.6%)
HHVMを導入
 チューニング方法をおさらい
16ms(約1100%) 195.05(約1690.8%)
Nginxを導入(Nginx+PHP 7)
 チューニング方法をおさらい
16ms(約1100%) 151.07(約1344%)
Nginxを導入(Nginx+HHVM)
 チューニング方法をおさらい
16ms(約1100%) 205.20(約1825.6%)
WP SiteManagerでページキャッシュを導入
 チューニング方法をおさらい
(測定不能) 2566.17(約22830%)

Nginxの「FastCGIキャッシュ」を導入する

 「WordPress1000倍高速化チューニング」の総仕上げをしていきましょう。今回はミドルウェアのページキャッシュである、Nginxの「FastCGIキャッシュ」を導入することで高速化します。

 こちらは、「WordPressのパーマリンクが有効であることを前提」に実施します。パーマリンクの設定は、WordPressの管理画面にログインして、「設定」→「パーマリンク設定」の共通設定で「日付と投稿名」を選択して、「変更を保存」を行ってください。

 コンソールに戻って、Nginxの設定ファイルを修正します。FastCGIキャッシュの基本設定のため、「/etc/nginx/nginx.conf」を以下のように修正します。

(略)
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  3;
    gzip  on;
    server_names_hash_bucket_size 128;
    fastcgi_cache_path /var/cache/nginx/wordpress levels=1:2 keys_zone=wpcache:30m max_size=512M inactive=600m;
    include /etc/nginx/conf.d/*.conf;
}
リスト:「/etc/nginx/nginx.conf」の修正箇所(14行目)

 「/etc/nginx/conf.d/http.conf」に具体的なキャッシュの条件を記述します。

(略)
        location ~ [^/]\.php(/|$) {
                fastcgi_split_path_info ^(.+?\.php)(/.*)$;
                if (!-f $document_root$fastcgi_script_name) {
                                return 404;
                }
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
                set $do_not_cache 0;
                
                if ($request_method = POST) {
                        set $do_not_cache 1;
                }
                if ($query_string != "") {
                        set $do_not_cache 1;
                }
                if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
                        set $do_not_cache 1;
                }
                if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") {
                        set $do_not_cache 1;
                }
                fastcgi_cache        wpcache;
                fastcgi_cache_key    "$request_method:$scheme://$host$request_uri";
                fastcgi_cache_valid  200 60m;
                fastcgi_no_cache     $do_not_cache;
                fastcgi_cache_bypass $do_not_cache;
                add_header X-F-Cache $upstream_cache_status;
        }
(略)
リスト:「/etc/nginx/conf.d/http.conf」の修正箇所(11行目〜30行目)
       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。