====== 17 Nginx FastCGI Cache ======
nginxにはキャッシュ機能としてプロキシキャッシュとFastCGIキャッシュがある。
https://arakoki70.com/?p=4144
https://www.rem-system.com/nginx-fastcgi-cache/
===== FastCGIキャッシュディレクトリとキーの設定 =====
fastcgi_cache_pathとfastcgi_cache_keyは、httpディレクティブに記述
http {
fastcgi_cache_path /tmpfs/cache-zone levels=1:2 keys_zone=cache-zone:30m max_size=512M inactive=600m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
.
.
.
.
^fastcgi_cache_path|/tmpfs/cache-zone|キャッシュの保存先。バーチャルホスト毎に異なるパスを指定|
^levels|1:2|キャッシュの構造レベルを指定|
^keys_zone|testdom:30m|ゾーン名とキャッシュキー管理用のメモリサイズ。 \\ ゾーン名はバーチャルホスト毎に指定します。 \\ ここではメモリサイズとしては30MBを保持するように設定|
^max_size|512M|キャッシュの最大サイズ。このサイズを超えると利用されていないものから削除されていく|
^inactive|600m|この時間アクセスが無いキャッシュを削除|
===== FastCGIを利用する設定 =====
こちらはlocationディレクティブに記述
location ~ \.php$ {
fastcgi_read_timeout 300;
fastcgi_pass unix:/opt/bitnami/php/var/run/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
include fastcgi_params;
### 以下の設定を追加 ###
set $do_not_cache 0;
# -- POST or HEAD ?
if ($request_method != "GET") {
set $do_not_cache 1;
}
# -- Login or Comment or Post Editting ?
if ($http_cookie ~ ^.*(comment_author_|wordpress_logged_in|wp-postpass_).*$) {
set $do_not_cache 1;
}
fastcgi_cache cache-zone;
fastcgi_cache_valid 200 60m;
add_header X-F-Cache $upstream_cache_status;
}
^$do_not_cache|0 1|キャッシュ時の条件記述。 \\ $do_not_cache=0の時はキャッシュしない。 \\ 上記の条件は、GET以外はキャッシュしない。cookie条件:コメント中、記事作成中、ログイン中の場合はキャッシュしない。|
^fastcgi_cache_valid|200 60m|HTTPステータス毎にキャッシュの有効期限を設定。 \\ ここではHTTPステータス:200は60分でキャッシュの有効期限が切れる|
^add_header X-F-Cache| $upstream_cache_status|ヘッダーX-F-Cache にキャッシュの状態を表示。HITとかMISSとか表示される|
===== キャッシュの確認 =====
「X-F-Cache」で確認できる。
設定の下記部分
add_header X-F-Cache $upstream_cache_status;
==== 一回目はキャッシュが無いので、MISSになる ====
# curl -D - -s -o /dev/null http://localhost/info.php
HTTP/1.1 200 OK
Server: nginx/1.18.0
Date: Sat, 01 May 2021 13:52:56 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/7.4.15
X-F-Cache: MISS
==== 2回目はキャッシュにHITする。 ====
# curl -D - -s -o /dev/null http://localhost/info.php
HTTP/1.1 200 OK
Server: nginx/1.18.0
Date: Sat, 01 May 2021 13:52:58 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/7.4.15
X-F-Cache: HIT
{{tag>Nginx}}