====== 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}}