nginxと裏のサーバ間のキャッシュを設定する。
nginxのproxyでキャッシュする場合は、proxy_cacheを設定する。
proxy_cache_path /dev/shm/c levels=1:2 keys_zone=cachezone:512m;
server {
location / {
proxy_cache cachezone;
proxy_pass http://appservers;
}
}
proxy_cache_pathでキャッシュの置き場所、置き方等を定義して、proxy_cacheでキャッシュ領域を割り当てる。
で、この場合、プロクシを通過したデータを512Mまでキャッシュする。
nginxでは細かい設定ができるのがイイね。
proxy_cache_path /dev/shm/c levels=1:2 keys_zone=cachezone:512m;
server {
location / {
set $dontcache 1;
if ($request_filename ~* ".*\.jpg$"){
set $dontcache 0;
}
if ($request_filename ~* ".*\.png$"){
set $dontcache 0;
}
proxy_cache_bypass $dontcache;
proxy_cache cachezone;
proxy_pass http://appservers;
}
}
こうすると、要求されたファイル名がjpg, pngで終わるときしかキャッシュしない(proxy_cache_bypassに与えた値が0以外であるとき、キャッシュ機構をバイパスする)
if文なので、$http_user_agent を使えばBOTと通常クライアントで異なる制御をしたりできる。
また、特定のクッキーを持っている時だけバイパスするということも可能なので、開発ユーザにクッキーを食べさせておいて、該当クッキーをチェックするようにすると便利。
if ($cookie_author ~ “true”){
set $dontcache 1;
}
みたいなこともできるし、そもそも、$cookie_author を 1/0 で制御するなら
proxy_cache_bypass $dontcache $cookie_author;
でも大丈夫。
(475)