6月 202010
VarnishはVersion2.1.1からRangeリクエストに対応するようになりました。
例えば最近のドコモ端末で動画を再生する場合501KB以上だと
サーバがRangeリクエストに対応していないと再生出来なかったりしますので対応は必要です。
ただこの機能は実験的で実際のところどうなんでしょうか?試してみました。
特に再起動なしで切り替えが可能ですので
telnetやvarnishadmでつないで
param.set http_range_support on
と打ちましょう。
その後確認としてshowして★の箇所がonになっていれば有効です。
param.show http_range_support
200 444
http_range_support on [bool]★
Default is off
Enable support for HTTP Range headers.
NB: We do not know yet if it is a good idea to
change this parameter, or if the default value is
even sensible. Caution is advised, and feedback
is most welcome.
また余りオススメしませんが起動パラメータにいれるのももちろん可能です。
以下のように付加してください。
-p http_range_support=on
この状態で一日放置したところ普段上がってもLAが0.2ぐらいのサーバが1まで上がってそのあと一気に2まで上がりました。
設定を変えた直後は特にLAも上がってなかったのですが・・・
レスポンスタイムは特に悪化してないようなのですが気持ちが悪かったのでOFFにしました。
まだちょっと本番に投入するには気合がいる設定です(実験的とも書いてありますし)
ただ再起動なしで設定出来ますし試しに入れてみるのはありかもしれません。(OFFにしたらすぐLA下がりました)
さて、実質Rangeは使えないのですが単純にバックエンドにpipeしてしまえば使えます。passだとダメです。
sub vcl_recv {
if(req.http.Range){
return(pipe);
}
}
こんな感じです。
コレだとRangeでリクエストしてきたものすべてがバックエンドに直撃しますので拡張子で絞ったりした方がいいかもしれません。
例えば3gp/3g2で制限掛ける場合
sub vcl_recv {
if(req.url ~ "\.(3gp|3g2)$" && req.http.Range){
return(pipe);
}
}
こうですね!
[…] This post was mentioned on Twitter by madSupporter and Varnish Cache, \いわなちゃん/. \いわなちゃん/ said: ちょっとしたコネタですが・・・ [blog] VarnishでRangeリクエストに対応する方法 http://bit.ly/dyu […]