質問: websocketの接続が、1分程度で切断されてしまいます。 サーバサイドでは「broken pipe」となっており、クライアントサイドではエラーコード1006が出力されていました。 websocketのエラーコードにはセキュリティ上の観点から情報隠蔽を意図した「何かのエラー:1006」という物があり、クライアントからは事実上何も情報が得られていません。 **keepaliveのような設定**があるのかと思い調べたのですが、今の所見つけられていません。 テストで作った簡易チャットでは、チャットを打ち続けていれば切断されないため、いわゆるpingpongのようなものを定期的に行えば維持できるとは思うのですが、それで正しいのか悩んでいます。 --- **構成(サーバ)** | 役割 | 使っているもの | | --- | --- | | フロント | Nginx 1.12.0(unix domain socket) | | バックエンド | Golang 1.11.4(FW echo)、golang.org/x/net/websocket | ### 発生している問題・エラーメッセージ [サーバ] Nginx アクセスログ indexページに普通に接続して、websocket接続の切り替え(101)も成功している ``` 192.168.10.2 - - [11/Feb/2019:14:14:11 +0900] "GET / HTTP/1.1" 200 1498 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36" "-" 192.168.10.2 - - [11/Feb/2019:14:15:15 +0900] "GET /ws HTTP/1.1" 101 17 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36" "-" ``` [サーバ] Nginx エラーログは出力なし [サーバ] Go-echoアプリサーバから出している切断時ログ 大体1分後に切断されている。エラー内容は「broken pipe」 ぴったり1分じゃないのは「test」と一言チャットしたせいです。 ``` 2019/02/11 14:14:11 Added new client. Clients connected: 1 2019/02/11 14:15:15 Delete client number: 1 2019/02/11 14:15:15 Error: write unix /srv/www/localhost/tmp/goecho.sock->@: write: broken pipe ``` [クライアント] エラーオブジェクトeの内容 chromeで、onclose(切断)時にconsole.logに出力しました。 このエラーコードには意味がないようです。 参考リンク→WebSocketの仕様を調べていたら頭がどうにかなりそうだった。 ``` CloseEvent { isTrusted: true, wasClean: false, code: 1006, reason: "", type: "close", ... } WebSocket { url: "ws://localhost/ws", readyState: 3, bufferedAmount: 0, onopen: ƒ, onerror: ƒ, ... } ``` 原因や定番の対策につきまして、お教えいただきたいです。 よろしくお願いいたします。
回答: 質問した直後に回答を見つけました...orz Nginx - WebSocket proxying > > By default, the connection will be closed if the proxied server does not transmit any data within 60 seconds. This timeout can be increased with the proxy_read_timeout directive. Alternatively, the proxied server can be configured to periodically send WebSocket ping frames to reset the timeout and check if the connection is still alive. > > > keepaliveを設定しないと60秒で切れるよとnginxの公式に情報がありました。 お騒がせしました。