更新: h2oを0.9.1から1.0.0にしたらこのハック無しでもいけたくさいです!
HTTP2使いになりたい!と思いはじめて数ヶ月。でもなかなかうまいことここぞという使い道がなかったので、2週間ほど前にとりあえず仕事でkuradoを立てた時に前段にh2oを入れて様子を見ていた。kuradoならたくさんグラフ表示されるし、HTTP2の恩恵を受けられるはず…!と思って。HTTP1モードでは当然特になんにも問題はなかったのだが、いざChromeでenable-spdy4を有効にした時になーんか… 崩れる…
具体的にはCSS、画像の類いがこない事が多いが、たまにメインのHTML部分が返ってこない。Chromeの開発者ツールやnet-internalsを見ててもただERR::connectionResetみたいなエラーが返ってくるだけで全然意味がわからなかったので、しばらくそれはそれで忘れてた。
だが、ふとローカル環境で同じセットアップを試そうと思って色々とログを出したりして見ていたら、h2o側にアクセスが行っているタイミングと裏のkuradoのアクセスログが出てくるタイミングが全然合わない状況が認識できた。
はっ… persistent connectionとかkeepalive timeoutとかだ…!
と 細かい理屈が脳内でさっと組み立てられなくても経験値からひねり出せる天啓を得たのでごにょごにょデバッグ開始…
色々な組み合わせを調べてみた結果、とりあえずh2o側の設定で以下のようにすると、動く。YATTA!
そしたら、SUGEEEEEEEEE! kuradoやcloudforecastはご存じの通り1ページに大量のグラフが出てくるんだけど、それらの描画が爆速になった!これぞまさにライフチェンジング!まぁなんかどこかに問題があるとは思うんだけど、とりあえず期待通りの結果を得られた。
もし「本当はこうするべきだよ!」という方法をご存じの方がいたら是非教えてください!
おまけ:
その後ツイッターでこんなやりとりが。この続きはあるのか…?
追記
HTTP2使いになりたい!と思いはじめて数ヶ月。でもなかなかうまいことここぞという使い道がなかったので、2週間ほど前にとりあえず仕事でkuradoを立てた時に前段にh2oを入れて様子を見ていた。kuradoならたくさんグラフ表示されるし、HTTP2の恩恵を受けられるはず…!と思って。HTTP1モードでは当然特になんにも問題はなかったのだが、いざChromeでenable-spdy4を有効にした時になーんか… 崩れる…
具体的にはCSS、画像の類いがこない事が多いが、たまにメインのHTML部分が返ってこない。Chromeの開発者ツールやnet-internalsを見ててもただERR::connectionResetみたいなエラーが返ってくるだけで全然意味がわからなかったので、しばらくそれはそれで忘れてた。
だが、ふとローカル環境で同じセットアップを試そうと思って色々とログを出したりして見ていたら、h2o側にアクセスが行っているタイミングと裏のkuradoのアクセスログが出てくるタイミングが全然合わない状況が認識できた。
はっ… persistent connectionとかkeepalive timeoutとかだ…!
と 細かい理屈が脳内でさっと組み立てられなくても経験値からひねり出せる天啓を得たのでごにょごにょデバッグ開始…
色々な組み合わせを調べてみた結果、とりあえずh2o側の設定で以下のようにすると、動く。YATTA!
paths: /: proxy.reverse.url: http://172.17.42.1:5434/ proxy.timeout.keepalive: 0
そしたら、SUGEEEEEEEEE! kuradoやcloudforecastはご存じの通り1ページに大量のグラフが出てくるんだけど、それらの描画が爆速になった!これぞまさにライフチェンジング!まぁなんかどこかに問題があるとは思うんだけど、とりあえず期待通りの結果を得られた。
もし「本当はこうするべきだよ!」という方法をご存じの方がいたら是非教えてください!
おまけ:
その後ツイッターでこんなやりとりが。この続きはあるのか…?
Daisuke Maki@lestrrath2oでproxy.timeout.keepalive: 0 にしたら無事Kurado通せたー
2015/02/19 15:00:59
Kazuho Oku@kazuho@lestrrat kurado 側で connection: close つけてないとか?
2015/02/19 15:10:11
Daisuke Maki@lestrrat@kazuho Starlet使ってるだけなんですよね…
2015/02/19 15:12:07
Daisuke Maki@lestrrat@kazuho https://t.co/qFbxZWxFHM
2015/02/19 15:12:56
Kazuho Oku@kazuho他人のせいにしようとしたらオレプロダクト間の問題だった時の顔をしてる
2015/02/19 15:13:50
Kazuho Oku@kazuhomax-keep-alive-reqs のデフォルト 1 だから接続キレそうだけどなぁ
2015/02/19 15:14:59
Kazuho Oku@kazuhoキレてな〜い
2015/02/19 15:15:19
Daisuke Maki@lestrrat@kazuho 僕もそう思ってました。なんですごく不思議でござった
2015/02/19 15:15:28
追記
Kazuho Oku@kazuho@lestrrat @kazeburo Starlet 0.24, H2O 1.0.0, https://t.co/K2u4vbjDXN で確認しましたが、max_keepalive_reqs を設定しない限り、ちゃんと接続が切れてますね
2015/02/19 16:40:10