のらねこの気まま暮らし

技術系だけど、Qiita向きではないポエムとかを書くめったに更新されないヤツ

WebScoketを使う時のVarnishの設定

前回の記事で、どうやらVarnishはクライアントから送られてくるHTTPヘッダのうち"Upgrade"と"Connection"をバックエンドサーバに送ってくれないらしい、ということがわかった。


そんなわけで、set req.http.upgrade とかで調べていたらたまたま見つけたgithubのページ

https://github.com/LearnBoost/socket.io/wiki/Varnish-and-Socket.IO


この記事に則って、次のようにvclに追記したら、見事websocket通信が行えた。

sub vcl_pipe {
    if (req.http.upgrade) {
        set bereq.http.upgrade = req.http.upgrade;
    }
}
sub vcl_recv {
    if (req.http.Upgrade ~ "(?i)websocket") {
        return (pipe);
    }
}