retlat's blog

Nginxで静的ファイルをリバースプロキシキャッシュ

Nginxのリバースプロキシで他のサーバにあるファイルをキャッシュする

まずhttpブロックでキャッシュファイルを保存するパスとキャッシュのパラメータを設定する

http {
    proxy_cache_path /var/nginx/cache keys_zone=static_assets:1m max_size=1g;
}

keys_zoneが1MBで8,000個のデータに関する情報を保存できるので, 1ファイル100KBと仮定すると800MB位になる
そんなに大きくないのでmax_sizeを全て格納できそうな1GBにする

次にserverブロックにリバースプロキシの設定を記述していく

upstream resource_server {
    server resource.example.com;
}
server {
    location /(css|js)/ {
        proxy_pass http://resource_server;
        proxy_cache static_assets;
        proxy_cache_valid 200 10m;
        add_header X-Cache-Hit $upstream_cache_status;
    }
}

proxy_cache_pathの keys_zone で指定したzone名を proxy_cache に設定し, proxy_passに記述したサーバからのレスポンスを格納する
proxy_cache_validではレスポンスのステータスコードごとにキャッシュ時間の制御ができる
ここでは200が返って来たら10分間キャッシュするように設定している
キャッシュが使われたか等の情報は $upstream_cache_status 変数が持っているのでヘッダーとして出力すると確認できる
ドキュメントには値の意味が見当たらなかったが, Nginxのブログには書いてあった