メモ。nginxのリバースプロキシでファイルをキャッシュする方法。
設定したページはこれ。バックエンドはGoogleAppEngine。
http://www.nullpobug.com/
試したnginxのバージョンは0.7。Ubuntu10.04のなので古い。
nginxの設定
nginx.confの中でconf.dやsites-enabledがincludeされるようになってることが前提。
/etc/nginx/conf.d/proxy_cache.conf
proxy_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=my-key:16m max_size=100m inactive=120m; proxy_temp_path /var/cache/nginx/tmp;
httpディレクティブにproxy_cache_pathを設定する。levelsは、キャッシュファイルをサブディレクトリで保存する設定。
この例の場合、my-keyというキーの領域で共有メモリは16MB使用、キャッシュ全体のサイズは100MB、120分間アクセスが無ければキャッシュは削除される。
proxy_temp_pathで一時ディレクトリを設定する。対象のディレクトリはあらかじめ作成し、nginxのworkerプロセスがアクセスできるようにしておく。
/etc/nginx/sites-available/my-site
server { listen 80; server_name www.example.com; proxy_set_header X-Real-IP $remote_addr; access_log /var/log/nginx/my-site.access.log; error_log /var/log/nginx/my-site.error.log; location / { proxy_pass http://127.0.0.1:8000; proxy_ignore_headers Cache-Control; proxy_cache my-key; proxy_cache_valid 200 302 60m; proxy_cache_valid 404 10m; } }
サイトごとの設定では、proxy_cacheでkeys_zoneに指定した名前、proxy_cache_validでキャッシュ対象と有効な時間を指定する。
この例では、レスポンスのステータス番号が200と302の場合は60分、404の場合は10分としている。
リバースプロキシ先のレスポンスにCache-Controlヘッダがついていて、"no-cache"とされているとキャッシュされないので、その場合はproxy_ignore_headersで無効化する。
nginxの設定をリロードする
$ sudo /etc/init.d/nginx reload