ポイント
- キャッシュ保存場所を変更するときは、proxy_cache_path の keys_zone の値と、proxy_cache の値を一致させる
- 前のキャッシュ保存ディレクトリは残る
- キャッシュのディレクトリは削除して問題なかった
- キャッシュが動作するとキャッシュディレクトリが作成された
プロキシキャッシュのディレクトリ変更実践
まずは設定ファイルのバックアップです。
cp -a /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.1406151651
2ヵ所編集いたしました。
vim /etc/nginx/conf.d/default.conf
ポイントは次です。
-
proxy_cache_path の keys_zone の値と、proxy_cache の値を一致させる
実際に次のように変更いたしました。
# キャッシュしたファイルが保管されるパスと、キャッシュゾーンの名前、容量を指定 #「cache1」のプロキシキャッシュ保管場所として「/var/cache/nginx/cache1」を指定 #「keys_zone=cache1:128m」でその容量は128MB #「levels=1」でキャッシュをファイルで格納する際にキーを1階層のディレクトリごとに分けて格納 proxy_cache_path /var/cache/nginx/cache1 levels=1 keys_zone=cache1:128m; # 利用するキャッシュゾーンの名前を指定 proxy_cache cache1;
↓
# キャッシュしたファイルが保管されるパスと、キャッシュゾーンの名前、容量を指定 # キャッシュ保管場所 /var/cache/nginx # キャッシュを保存するサブディレクトリ階層の深さ 1:2 # キャッシュゾーン czone メモリの割当量 32m # ゾーン内に保存できるキャッシュ最大値 256m # アクセスの無いキャッシュを削除するまでの期間 1440m proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=czone:32m max_size=256m inactive=1440m; # 利用するキャッシュゾーンの名前を指定 proxy_cache czone;
nginx を再起動して設定変更を反映させます。
/etc/init.d/nginx restart
これでプロキシキャッシュの作成場所を変更することができました。
以前のキャッシュがゴミとして残っていますのでお掃除♪
30 分ほど経過を見た程度ですけれども、以前のキャッシュ保存ディレクトリはそのままでしたの。
ですから、恐る恐る削除いたしました。いえ、削除ではなくて /tmp ディレクトリへ移動してみましたの。そうしましたら、、、なにも問題なさそうですわ♪
mv /var/cache/nginx/cache1/ /tmp/cache1/
おまけ。ちなみに、変更後の /etc/nginx/conf.d/default.conf はこうなりましたの♪
# ドキュメントルート
root /var/www/html/oki2a24.com;
# インデックスファイル指定
index index.php index.html index.htm;
# キャッシュしたファイルが保管されるパスと、キャッシュゾーンの名前、容量を指定
# キャッシュ保管場所 /var/cache/nginx
# キャッシュを保存するサブディレクトリ階層の深さ 1:2
# キャッシュゾーン czone メモリの割当量 32m
# ゾーン内に保存できるキャッシュ最大値 256m
# アクセスの無いキャッシュを削除するまでの期間 1440m
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=czone:32m max_size=256m inactive=1440m;
# 利用するキャッシュゾーンの名前を指定
proxy_cache czone;
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;
# ステータスコードが通常応答の「200」と、ファイルが存在しない「404」の場合30分間キャッシュを保持
proxy_cache_valid 200 404 30m;
# プロキシサーバ設定
server {
listen 80 default_server;
# ドットファイルへのアクセスを禁止、ログへの記録オフ
location ~ /\. {deny all; access_log off; log_not_found off; }
# robots.txt へのアクセスはログへの記録オフ
location = /robots.txt { access_log off; log_not_found off; }
# favicon へのアクセスはログへの記録オフ
location = /favicon.ico { access_log off; log_not_found off; }
# JavaScript CSS 画像へのアクセスはログへの記録オフ、直ちにプロキシに通しキャッシュ。
# この期の設定でアクセス元の状態で複数キャッシュを行うが画像ファイルなどは複数キャッシュさせない
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;
# .php ファイルへ直接アクセスがあるのは基本的に管理ページのみのためキャッシュしない
if ($uri ~* "\.php$") {
set $do_not_cache 1;
}
# POST 時はキャッシュしない
if ($request_method = POST) {
set $do_not_cache 1;
}
# $proxy_cache_key に任意の文字を加えることで別のキーでページをキャッシュ可能にする
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;
}
}
# ウェブサーバ設定
server {
# ポートを指定
#listen 80;
listen unix:/var/run/nginx.sock;
# 実ファイルがない場合のアクセスファイル
try_files $uri $uri/ /index.php;
location / {
# WordPress パーマリンク設定を利用可能にする
if (!-e $request_filename) {
rewrite ^.+?(/wp-.*) $1 last;
rewrite ^.+?(/.*\.php)$ $1 last;
# ドキュメントルートから WordPress までの相対パス
# (ドキュメントルートにインストールしたため相対パスは記入なし)
rewrite ^ /index.php last;
}
}
# PHP-FPM 設定
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
おわりに
なぜキャッシュディレクトリの場所を変更する必要があったのでしょうか?
それは、、、WordPress のこのプラグインを使ってみたいからですわ!
このプラグイン設定で、キャッシュの格納場所を指定する必要があるのですけれども、なんとなくプラグインのデフォルトの場所にしたく感じましたの。
その場所は次のページに記されておりました。
ですので、勉強がてらキャッシュの場所を変更する方法、そして以前の場所がどうなるのかを実際に観察いたしましたの♪
少しずつ、nginx に慣れていきますわ!
以上です。
