Nginx で IE 8.0 以下には jQuery のバージョン 1 を返すようにする

jQuery バージョン 2 から IE 9 未満のサポートが切り捨てられて、実装的にもファイルサイズ的にも軽くなっています。 ただそうは言っても IE 8 以前のアクセスもあるため、サーバ側でブラウザに合わせて、jQuery を切り替えて返してしまおうという設定をしました。

server {

    (略)

    modern_browser unlisted;
    ancient_browser "MSIE 6.0" "MSIE 7.0" "MSIE 8.0";
    
    location ~ ^/statics {
        root    /var/www/html/statics;

        if ($ancient_browser) {
            set $oldie_jq  O;
        }

        if ($request_filename ~* jquery\.min\.js) {
            set $oldie_jq  "${oldie_jq}K";
        }

        if ($oldie_jq = OK) {
            rewrite ^(.*)\/jquery\.min\.js$  $1/jquery-1.min.js  break;
        }

        break;
    }

    (略)
}

modern_browser と ancient_browser はそのままで Nginx としてモダンなブラウザか古いブラウザをセットすることができます。これによって古いブラウザに該当するかどうかを $ancient_browser を評価するだけで行えます。

続いてリクエストファイルが jquery.min.js かどうかを判定しています。if で AND が書けないためトリッキーな変数評価をしています。

IE 6.0~8.0だったときは jquery.min.js を jquery-1.min.js に rewrite することでバージョン 1 系を返しています。 バージョン 2 系は jquery.min.js 自体になります。