経験知ロゴ

WordPressをNginxのProxy cacheを使用して高速化&負荷軽減する方法

※本ページはプロモーションが含まれています

nginx
WordPressの高速化と負荷軽減のためにNginxの「Proxy cache」を利用するようにしました。

Nginx + WordPress proxy cache篇 « サーバーワークス エンジニアブログ」を参考にして設定したのですが、かなり苦戦したので、僕なりの解説を加えて設定方法を紹介します。

Proxy cacheを使う意義

通常のWordPressの処理は「https://keikenchi.com/about」というアクセスが来たら、「about」に紐づくデータを取り出し、HTMLを作成しユーザーへ返すという処理をする。

通常は「https://keikenchi.com/about」へアクセスがある度に同じ処理をして返すのが、「Proxy cache」を使うと処理した内容をユーザーへ返す時にその処理の結果をそのまま保存し、次に「https://keikenchi.com/about」へアクセスが来たら保存してた結果をそのまま返す。

つまり、「about」に紐づくデータを取り出したり、HTMLを作成するという処理を行わないため、アクセスがあってからの返しが早く、データベースへのアクセスが無くなるのでサーバーの負担が減るということ。

Proxy cacheの設定。

Nginx + WordPress proxy cache篇 « サーバーワークス エンジニアブログ」を参考に設定方法を紹介。

nginx.confの編集

設定ファイル「/etc/nginx/nginx.conf」の「http」内に追加

http {
   …
    proxy_cache_path /var/cache/nginx/cache levels=1 keys_zone=zone1:4m inactive=7d max_size=50m;

    include /etc/nginx/conf.d/*.conf;
}

ここは特に問題なくそのまま使える。が、「/var/cache/nginx/cache」を作成していないで躓いた。「/var/cache」内に「nginx」というフォルダとその中に「cache」というフォルダを作成しておく。

default.confの編集

僕が追加で設定した内容は

upstream backend {
    server 127.0.0.1:8080;
}

server {
    listen       80;
    server_name keikenchi.com;

    access_log  /var/log/nginx/access_80.log  main;

    location = /favicon.ico {
        log_not_found off;
    }

    location /wp-admin {
        proxy_pass http://backend;
    }

    location /wp-login.php {
        proxy_pass http://backend;
    }


    location / {
        proxy_pass http://backend;
        proxy_cache zone1;
        proxy_cache_key $scheme$proxy_host$uri$is_args$args;
        proxy_cache_valid  200 1d;
    }
}

server {
        listen 8080;
        server_name keikenchi.com;
       … 後は通常の設定。
}

参考サイトから変更した場所は「server_name」を80番と8080番の両方とも自分のドメインに変更。

ブログはレスポンシブデザインにしてあるので携帯やスマホ用サイトを分ける必要がないので、

        proxy_no_cache     $do_not_cache;
        proxy_cache_bypass $do_not_cache;

        if ($http_user_agent ~* '(DoCoMo|UP.Browser|SoftBank|WILLCOM|emobile|iPhone|iPod|Android.*Mobile)') {
            set $do_not_cache 1;
        }

の部分は削除。

変更をしたらNginxを再起動。

$ sudo service nginx restart

上記設定でうまくいったが、それまでは設定を間違えていて試行錯誤の連続だった。
トップページだけ表示されて他のページが表示されなかったり、500エラーが出たりなど。

おそらく、何回か試しているうちに中途半端なキャッシュが出来たのが原因だと思う。設定し、再起動してうまくいかない時はキャッシュの削除をしてみる。

$ sudo rm -fr /var/cache/nginx/cache/*

「rm」コマンドなので取り扱いに注意。

キャッシュを削除したら上手くいった。

Nginx Proxy Cache Purgeの導入

キャッシュが作成されると指定した時間(上記設定では1日)立たないと新しいページが作成されないため、新規投稿してもトップページに反映されないということが起こる。

WordPressのプラグイン「Nginx Proxy Cache Purge」をインストールすれば、新規投稿、編集時にキャッシュを全て削除してくれるので、必ず導入する。

追記:Nginxの「ngx_cache_purge」モジュールがインストールされていないと動かない。インストールの仕方は「Nginxで「ngx_cache_purge」モジュールを入れてProxy cacheを削除しやすくする方法」で。

おわりに

PHPやデーターベースへのアクセスを極力減らしたく、「WP Super Cache」などを検討していましたが、Nginxでの設定やその後の不具合を考えると、今回のNginxのProxy cacheを使用する方法に落ち着きました。

まだそれほどアクセスのあるブログではないですが、急なアクセス増に備えて今のうちから速度&負荷対策をしていきたいと思います。

役に立ったらこの記事のシェアをお願いします

ブログのフォロー・RSS購読は下記ボタンから