「Plack::Builderのenable_ifよりも簡単に、指定した条件下でmiddlewareを有効にするモジュール」で書いていた Plack::Builder::Conditionals をリリースしました。
ReverseProxyを使う場合は、接続元のIPアドレスを指定するのが必須になりますが、Conditionalsなら簡単に書けます
use Plack::Builder;
use Plack::Builder::Conditionals;
builder {
enable match_if addr(['192.168.0.0/24','127.0.0.1']), "ReverseProxy";
$app
};
今日出したバージョン0.02では、User-Agentをチェックするメソッドを追加してます。PlackでHTTPコンテンツ圧縮する場合は、これを利用して
builder {
# 古いバージョンにはhtml以外に問題がある
enable match_if browser(qr!^Mozilla/4!), 'ForceEnv',
"psgix.compress-only-text/html" => 1;
# Netscapeの4.0x とかもういねぇよ
enable match_if browser(qr!^Mozilla/4\.0[678]!), 'ForceEnv',
"psgix.no-compress" => 1;
# IE7,8はMozilla/4だけど問題はないNe
enable match_if browser(qr!\bMSIE (?:7|8)!), 'ForceEnv',
"psgix.no-compress" => 0,
"psgix.compress-only-text/html" => 0;
enable "Deflater",
content_type => ['text/html','text/css','text/plain','text/javascript','application/javascript'],
vary_user_agent => 1;
$app
}
ように設定できます。ただしpsgix.no-compressがサポートされているのはまだ僕のgithubのforkだけです。テストしてくれる方募集中