元フリーエンジニアライフ

Ruby on Rails とか MovableType とかAWSやってるフリーランスウェブエンジニアの記録でした。現在は法人成りしてIT社長。

nginxでPC/スマホ/ガラケー別にキャッシュする

こんなかんじで、これと組み合わせて、それぞれキャッシュするようにしてます。

判定条件はmt-plugin-httpuseragentと同じです。

set $ua pc;
set $general 1;
set $smartphone 0;
set $featurephone 0;


set $docomo 0;
set $au 0;
set $softbank 0;
set $iphone 0;
set $android 0;
set $ipad 0;
set $androidtab 0;

if ($http_user_agent ~* DoCoMo) {
    set $ua docomo;
    set $docomo 1;
    set $general 0;
    set $featurephone 1;
}
if ($http_user_agent ~* UP\.Brower|KDDI-) {
    set $ua au;
    set $au 1;
    set $general 0;
    set $featurephone 1;
}
if ($http_user_agent ~* J-PHONE|Vodafone|SoftBank) {
    set $ua softbank;
    set $softbank 1;
    set $general 0;
    set $featurephone 1;
}
if ($http_user_agent ~* iPhone) {
    set $ua iphone;
    set $iphone 1;
    set $general 0;
    set $smartphone 1;
}
if ($http_user_agent ~* iPad) {
    set $ua ipad;
    set $ipad 1;
}
if ($http_user_agent ~* Android) {
    set $android 1;
    set $androidtab 1;
}
if ($http_user_agent ~* Mobile) {
    set $androidtab 0;
}
if ($http_user_agent ~* SC-01C) {
    set $androidtab 1;
    set $android 0;
}
if ($android = 1) {
    set $ua android;
    set $general 0;
    set $smartphone 1;
}
if ($androidtab = 1) {
    set $ua androidtab;
}

if ($request_method != GET) {
    set $do_not_cache 1;
}
if ($uri !~* "(/|.(jpg|png|gif|jpeg|css|js|swf|pdf|htm|html))$") {
    set $do_not_cache 1;
}

#if ($remote_addr ~ "^(XXX\.XXX\.XXX\.XXX|YYY.YYY.YYY.YYY)$") {
#    set $do_not_cache 1;
#}

proxy_cache_key $ua$scheme$host$uri$is_args$args;
proxy_no_cache $do_not_cache;
proxy_cache_bypass $do_not_cache;
proxy_cache cache_static_file;
proxy_cache_valid 200 5m;
proxy_cache_valid any 1m;