はじめに
Nginxを使用したプロキシキャッシュの設定をローカル環境で手軽に体感することを目的としておりますので、Nginxに初めて触れる方向けの内容となっております。
キャッシュとは
同じアクションを高速化するために、ソフトウェアなどで取り扱うデータを一時的に保存する仕組みのことです
プロキシキャッシュとは
Nginxなどのプロキシサーバが動的コンテンツやバックエンドのレスポンスをキャッシュする手法です
環境
- Ubuntu 24.04
- nginx-1.26.3
- 推奨される設定状態
-
sites-availableとsites-enabledディレクトリが存在する -
/etc/nginx/sites-enabled/内の設定ファイルがNginxの設定に組み込まれている - 静的ファイルが存在する
-
下記のサイトで上記のような環境にする方法が記載されております。
手順1:プロキシキャッシュの設定
下記のコードをnginx.confに追加します。
/etc/nginx/nginx.conf
http {
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
}
-
/var/cache/nginx- キャッシュデータが保存されるディレクトリのパスです
-
levels=1:2- キャッシュファイルをディレクトリツリー内で保存する方法です。1:2は、1階層目に1文字、2階層目に2文字のサブディレクトリを作ることを意味します。これによりファイルシステムのパフォーマンスが向上します
-
keys_zone=my_cache:10m- キャッシュキーを格納するメモリ領域の名前を
my_cache、サイズを10MBに設定しています
- キャッシュキーを格納するメモリ領域の名前を
-
max_size=1g- キャッシュの最大サイズを1GBに制限しています。1GBを超えると古いキャッシュから順に削除されます
-
inactive=60m- キャッシュが60分間使用されなかった場合、キャッシュが削除されます。つまり、最後にアクセスされてから60分経過すると、そのキャッシュは無効化されます
-
use_temp_path=off- 一時的なファイルの保存を無効化します。これにより、キャッシュデータは直接
/var/cache/nginxに保存されます
- 一時的なファイルの保存を無効化します。これにより、キャッシュデータは直接
/etc/nginx/sites-available/proxy_cache.conf
server {
listen 8080;
server_name localhost;
location / {
proxy_pass http://localhost:80;
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
add_header X-Cache $upstream_cache_status;
}
}
-
proxy_cache my_cache;-
my_cacheという名前のキャッシュゾーンを使用してバックエンドからのレスポンスをキャッシュします
-
-
proxy_cache_valid 200 302 10m;- 200と302ステータスコードのレスポンスを10分間キャッシュします
-
proxy_cache_valid 404 1m;- 404ステータスコードのレスポンスを1分間キャッシュします
-
add_header X-Cache $upstream_cache_status;- キャッシュの状態をX-Cacheヘッダーに追加します
/etc/nginx/sites-available/normal
server {
listen 80;
server_name localhost;
# リクエストされた際にドキュメントがある場所
root /path/to/static/files;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
手順2:sites-enabled/にシンボリックリンクを作成
sudo ln -s /etc/nginx/sites-available/normal /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/proxy_cache.conf /etc/nginx/sites-enabled/
手順3:設定の反映
sudo systemctl reload nginx
手順4:キャッシュの状態を確認する方法
-
http://localhost:8080にアクセスし、開発者ツールを開きます。 - ネットワークタブを選択します
- 再度ページをリロードします
- キャッシュ対象のリクエストを選択して、
レスポンス ヘッダーのX-Cacheヘッダーが表示されるので、キャッシュの状態(例:HIT)を確認します
X-Cacheの状態
-
HIT- キャッシュからレスポンスを返した場合
-
MISS- キャッシュが存在しなかった場合(初回リクエストなど)
-
BYPASS- キャッシュがバイパスされた場合(例えば、キャッシュ無効化設定が適用された場合)
-
EXPIRED- キャッシュが期限切れになり、バックエンドから新たにレスポンスを取得した場合
まとめ
以上で、プロキシキャッシュの設定ができました。