iyuichiの私的開発ログ

渋谷で働くWebエンジニアのログ. Java, Android, iOS, Docker, GCP, AWS, ゲーム開発

nginxのproxy cacheでwordpressのパフォーマンスを上げる方法

nginxのproxy cacheでwordpressのパフォーマンスをアップする

このブログのことですが、wordpressVPS上に乗せて運用しています。

ざっくりとしたサーバ構成は以下のようになっています。

1. 外向きには80番ポートでnginxがリクエストを受信

2. Dockerでnginx + wordpressなコンテナを起動

3. 前面のnginxはproxyのみを担当してコンテンツはwordpressコンテナに乗っている

スクリーンショット 2015-03-06 10.52.20

そんな構成で動かしているのですが、どうもレスポンスが遅いなとずっと思っていて1sec - 5secくらい表示までにかかることが普通にありました。

そこで少しでも早くならないかな?と思って導入したproxy cacheが結構効いた気がするので記事を残しておこうと思います。

まずnginx.confに以下を記載しました。

        # cache

proxy_cache_path /var/run/nginx-cache levels=1:2 keys_zone=wpcache:10m inactive=7d max_size=1000m;

proxy_temp_path /var/run/nginx-temp;

  • levelsはキャッシュを保管するディレクトリを何階層にするか
  • keys_zone キャッシュの名前空間と利用するメモリ量
  • inactive キャッシュを無効にするまでの期間。
  • max_size キャッシュを保持する最大容量

ざっくりこのように理解していますが間違えていたらすみません。。。

次にsite-enabled/defaultに以下を記載。

キャッシュ設定に関わる部分以外は省略しています。

server {

location /blog/ {

proxy_pass http://localhost:10080;

set $do_not_cache 0;

if ($uri ~* "\.php$") {

set $do_not_cache 1;

}

if ($request_method = POST) {

set $do_not_cache 1;

}

if ($http_cookie ~ ^.*(comment_author_|wordpress_logged_in|wp-postpass_).*$) {

set $do_not_cache 1;

}

if ($request_uri ~ "^/blog/wp-admin/.*"){

set $do_not_cache 1;

}

proxy_no_cache $do_not_cache;

proxy_cache_bypass $do_not_cache;

proxy_ignore_headers Cache-Control;

proxy_cache wpcache;

proxy_cache_key "$scheme://$host$request_uri";

proxy_cache_valid 200 301 302 1d;

proxy_cache_valid 404 20m;

}

}

内容としては、

POSTのリクエストと、管理画面系のリクエスト、ログインしている場合についてキャッシュしないようにしています。

それ以外は1日キャッシュ。404のリクエストは20分キャッシュ。

だいたいそんな感じです。

だいぶ良くなったと思うのですが、まだときどき遅いのでまた何か考えてみようと思います。

マスタリングNginx

新品価格
¥3,240から
(2015/3/6 11:22時点)

Software Design (ソフトウェア デザイン) 2014年 07月号 [雑誌]

中古価格
¥737から
(2015/3/6 11:23時点)