varnishのヘッダを眺めてみた
どうにもwebsocketが動かない。
いろいろ試したり相談したりした末にでた結論として
「varnishをロードバランサにしてるからじゃね」
というわけで、websocket導入のついでにvarnishのちょっとしたことをメモする。
Varnishlog
varnishのログを見るコマンド。
共有メモリ上に吐かれるらしいので、あまり使うとよくない。
通信のヘッダやら何やらがたくさん測れるのでちょっと見にくい気がする。
Varnishlogの絞り込み
- -c
- クライアント -> Varnish間の通信で絞り込む
- -o
- Varnish -> バックエンドサーバの通信で絞り込む
$ varnishlog -c -o
また、マッチングもしてくれるらしい。
$ varnishlog -c -o rxurl /ws
これは、/ws の通信におけるバックエンド・クライアントの通信に絞り込んでくれるらしい。
rxurlはクライアント -> varnishの通信で含まれるパラメータRxURLのことで、リクエストパスを示している、んじゃないかな。
リクエストヘッダを見る。
Varnishlogを見ていると、[RxHeader]とか[TxHeader]とかあってなんじゃこら?になる。
RxHeaderとは、クライアントからのリクエストヘッダーを示し、
TxHeaderとは、Varnishからバックエンドサーバに渡されたヘッダーを示しているそうな。
以下のログは、WebSocketを導入したページからのリクエストの一部分。
WebSocketのリクエストが来ているのがわかる。
20 RxRequest c GET
20 RxURL c /ws
20 RxProtocol c HTTP/1.1
20 RxHeader c Upgrade: websocket
20 RxHeader c Connection: Upgrade
20 RxHeader c Sec-WebSocket-Key: TIomdaKb9p+kgX22r5YX7g==
20 RxHeader c Sec-WebSocket-Version: 13
対してこちらは、Tx(バックエンドサーバに送ってる方)
13 TxRequest b GET
13 TxURL b /ws
13 TxProtocol b HTTP/1.1
13 TxHeader b Sec-WebSocket-Key: roVq1QQgZwAGks1casuXTg==
13 TxHeader b Sec-WebSocket-Version: 13
13 TxHeader b X-Varnish: 1753177372
いろいろ情報端折ったけど、結論から言えば、以下の2つの情報がバックエンドに送られていない。
20 RxHeader c Upgrade: websocket
20 RxHeader c Connection: Upgrade
まとむる。
どうすればいいのかこれから調べる。以上。