Wordpressを運用するときに直接PHPで処理を行うのではなくキャッシュなどを経由して利用してみようということで試してみました。 サイトのレスポンスも高速になります。検証した環境ではざっくりですがおおよそ33msかかっているものがおおよそ12msまで短縮できました。 今回は、なるべく利用するサービスなどは増やさないでできないかどうかとう点と手軽に実現できる方法をということで探って検証してみました。 OSはLinuxのDebian 10を使用しています。HTTPサーバーにはNginxを使用しました(Wordpressを動かすのにはPHP-FPMを使用しています)。
今回は1台のサーバーで、運用する方針で進めていきますが2つのアドレスでアクセスする形式をとります。
- 1つ目:
https://source.domain.com
- 2つ目:
https://www.domain.com
(domain.comなどは環境に合わせて変更。DNSのAレコードには同じIPアドレスを指定します。)
の2つに対してそれぞれ設定をします。
1つ目のhttps://source.domain.com
は管理画面などで記事を更新するために用意します。
こちらの方では、PHPを直接動かす方になりますので今回は外部からのアクセスを限定します。
外部からのアクセスの制限でIPアドレスで制限をかける場合には、このサーバーのIPアドレスからのアクセスは許可するように
しておきます。
また、PHPの設定などは通常どおり行います。Wordpressに設定するWordPress Address(URL)とSite Address(URL)はこの
https://source.domain.com
にします。)
2つ目のhttps://www.domain.com
の方は一般に公開するためのアドレスです。こちらのほうはNginxで80/443(HTTP/HTTPS)を受けつけて
キャッシュした内容を返すのが役割です。キャッシュがない場合にはhttps://source.domain.com
にアクセスしてコンテンツを
取得します。
/var/www/data
にディレクトリを作成してwww-dataが書き込み出来るように設定します。
cd /var/www sudo mkdir data chown www-data data
Nginxの設定のそれぞれの箇所に次を付け足します。
http { proxy_cache_path /var/www/data levels=1:2 keys_zone=cache-zone:512m inactive=10m; proxy_cache_valid 200 2h; proxy_cache_valid any 1m; }
proxy_cache_path
でキャッシュの保存先とこの保存先の名前(keys_zone)を設定しています。
proxy_cache_valid
はレスポンスコードごとのキャッシュ時間を設定しています。
server { server_name www.domain.com; location / { limit_except GET { deny all; } sub_filter 'source.domain.com' 'www.domain.com'; sub_filter_once off; proxy_pass https://source.domain.com/; proxy_cache cache-zone; } }
limit_except:
基本的にGETのリクエストになりますのでGET以外は許可しないようにします。/wp-admin/
からログインできないようにします。
sub_filter:
Wordpressは、画像やCSSをパスではなくhttp(s)://~から始まるアドレスで指定しているためこれを書き換える必要ありました。そこで、Nginxのsub_filterを使用しています。
このsub_filterはsudo apt install nginx
のように通常のインストールだと含まれておりませんのでnginx-extras
を指定します。
sudo apt install nginx-extras
proxy_pass:
proxy_passで元となるコンテンツにアクセスしています。
proxy_cache:
proxy_cacheにhttp {}のところで記述したキャッシュの保存先を指定しています(cache-zoneという名前です)。
参考にさせていただいたサイト:
nginx.org server-setting.info nginx.org macotasu.hatenablog.jp nginx.org stackoverflow.com qiita.com serverfault.com nginx.org nginx.org