nginxのサーバーキャッシュの設定方法

今回は「nginxのサーバーキャッシュの設定方法」です。

サーバーキャッシュは

自分のサーバー構成です。(ここの)

キャッシュがない場合

クライアントからのアクセス

↓ ↑

WEBサーバー(nginxリバースプロキシ)

↓ ↑

WEBサーバー(apache)

↓ ↑

PHP-FPM

↓ ↑

DB(mariadb)

なのですが、これだと毎回バックエンドのapacheにアクセスがくるのでリソース不足になりページの表示速度がかなり落ちます。

そのためキャッシュを配信をしていれば毎回apacheにアクセスしなくてもよいため、ページが非常に速くなります。

キャッシュがある場合

クライアントからのアクセス

    ↓

nginx

       ↓

apache  キャッシュ

1,apacheのキャッシュモジュールを無効にする

これをしないとキャッシュが配信されなかったりキャッシュの有効期限切れとなりキャッシュが配信されないです。そのため無効にします。

vim /etc/httpd/conf.modules.d/00-base.conf

で開き

LoadModule cache_module modules/mod_cache.so
LoadModule cache_disk_module modules/mod_cache_disk.so
LoadModule cache_socache_module modules/mod_cache_socache.so
LoadModule expires_module modules/mod_expires.so
から
#LoadModule cache_module modules/mod_cache.so
#LoadModule cache_disk_module modules/mod_cache_disk.so
#LoadModule cache_socache_module modules/mod_cache_socache.so
#LoadModule expires_module modules/mod_expires.so

に#を入れてください。

apacheを再起動してください。

2,nginxのキャッシュ設定

次はnginxです。少しめんどくさいです

vim /etc/nginx/nginx.conf

で開き

proxy_cache_path /var/cache/nginx/cache levels=2:2 keys_zone=cache_key:10m max_size=5g inactive=30m;

を入れてください。

「levels=2:2 keys_zone=cache_key:10m max_size=5g inactive=30m;」の辺はぐぐってください。

vim /etc/nginx/conf.d/*.conf
*はドメイン名やいろんな文字?をかくことができるため*にしています。

で開き

proxy_no_cache $do_not_cache;
proxy_cache_bypass $do_not_cache;
proxy_ignore_headers Cache-Control;
proxy_cache cache_key;
proxy_cache_valid 200 302 60m;
proxy_cache_valid 404 10m;

add_header X-Cache-Status $upstream_cache_status;
set $do_not_cache 0;
 set $keys_zone worklog;
if ($request_uri ~* '/(wp-admin/|wp-login.php|wp-cron.php|xmlrpc.php|\??feed|wp-json|sitemap.xml)') {
    set $do_not_cache 1;
}
            if ($request_method != GET) {
    set $do_not_cache 1;
}
            if ($http_cookie ~* 'comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in') {
    set $do_not_cache 1;
}

を追加してください。

if ($request_method != GET)

はGET以外はキャッシュしない?です。

「$request_uri ~* ‘/(wp-admin/|wp-login.php|wp-cron.php|xmlrpc.php|\??feed|wp-json|sitemap.xml)」「ttp_cookie ~* ‘comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in」

を追加していないとワードプレスをログイン中でもログインした状態でキャッシュしてそのキャッシュを配信されてやばいことになります。乗っ取りとか

nginxを再起動してください。

nginxのキャッシュの状態を見る

x-cache-statusがmissの場合はキャッシュは配信されていません。

x-cache-statusがhitの場合はキャッシュが配信されています。

x-cache-statusがBYPASSの場合はキャッシュは配信されていません。

nginxのキャッシュの設定はめんどくさいですが表示時間が速くなるならやったほうがいいですね。

最後まで読んでくれてありがとうございました。

この記事が良かったら、シェアしてね!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です