Kugelblitz

いつ何時誰の挑戦でも受ける!

wordpressのレスポンスをキャッシュする(nginx)

wordpressのレスポンスをnginxでキャッシュする設定を追加してみました。

基本的には、このサイト(【nginx】【超高速】 WordPress のウェブサーバーを nginx にして、プロキシキャッシュを使ってパフォーマンスをとても向上させるまでの試行錯誤です!【Apache からの卒業】)の記述を参考にしています。

また、以下の説明は、前回のこの記事の設定が終わっていることを前提とします。

まず、前回はWordPress Codexの記述を元に設定しているわけですが、その中の「Per Site configuration」で作成した設定ファイルに以下の記述を追加します。追加位置に意味があるかはわからないけど、意味的には既存の設定の上に追加した方がいいと思います。

# Redirect everything to the main site.
proxy_cache_path  /var/cache/nginx/cache1 levels=1 keys_zone=cache1:128m;
proxy_cache cache1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache_valid 200 404 30m;

server {
    listen 80 default_server;

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        log_not_found off;
        proxy_pass http://unix:/var/run/nginx.sock;
    }

    set $do_not_cache 0;
    if ($uri ~* "\.php$") {
        set $do_not_cache 1;
    }

    if ($request_method = POST) {
        set $do_not_cache 1;
    }

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

    if ($http_cookie ~ "(wordpress_logged_in_|comment_author_)(.*)") {
        set $proxy_cache_key "$2::$proxy_cache_key";
    }

    location / {
        proxy_no_cache $do_not_cache;
        proxy_cache_bypass $do_not_cache;
        proxy_cache_key $proxy_cache_key;
        proxy_pass http://unix:/var/run/nginx.sock;
    }
}

で、もともとは、

listen 80 default_server;

としていた箇所をコメントアウトして、

listen unix:/var/run/nginx.sock;

とします。

最初に追加した設定箇所で、キャッシュからレスポンスするかどうかを決めて、キャッシュがなかったらUNIXソケット(unix:/var/run/nginx.sock)経由でwordpressのphp経由でレスポンスするような設定ですね。ざっくり言うと。

webページにアクセス後、/var/cache/nginx/cache1のファイルを参照してみると、更新日時が変わっていくので、キャッシュが効いているものと思われます。

今度はキャッシュの有無がどのくらいパフォーマンスに効いてくるかを計測してみようと思います。参考にしたサイトにもありますが、https://gtmetrix.comがわりとつかえそうです。

Pocket

他の記事