nginxのproxy cacheでwordpressのパフォーマンスを上げる方法
nginxのproxy cacheでwordpressのパフォーマンスをアップする
このブログのことですが、wordpressをVPS上に乗せて運用しています。
ざっくりとしたサーバ構成は以下のようになっています。
1. 外向きには80番ポートでnginxがリクエストを受信
2. Dockerでnginx + wordpressなコンテナを起動
3. 前面のnginxはproxyのみを担当してコンテンツはwordpressコンテナに乗っている
そんな構成で動かしているのですが、どうもレスポンスが遅いなとずっと思っていて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分キャッシュ。
だいたいそんな感じです。
だいぶ良くなったと思うのですが、まだときどき遅いのでまた何か考えてみようと思います。
新品価格 |
Software Design (ソフトウェア デザイン) 2014年 07月号 [雑誌] 中古価格 |