問題の現象
socket.ioのクライアントからnode.js上で動作するsocket.ioのサーバに接続したときに、ブラウザのコンソールに、次のエラーが表示される。
WebSocket connection to 'wss://xxx' failed: Error during WebSocket handshake: Unexpected response code: 400
ただし、socket.ioの動作自体には問題がない。websocketでの接続に失敗したので、ポーリングによってsocket.ioが接続されたもよう。
環境
AWS EC2 ロードバランサ(Classic Load Balancer)
Node.js
Socket.io
修正方法
ロードバランサのリスナーで、通常は、HTTPS -> HTTPとしている転送を、以下のように、SSL -> TCP(80)とする。
httpsと同じポートの433ではあるがプロトコルがwebsocketの場合はwssなので、ロードバランサが通してくれなかったと思われる。そこで、同じポートではあるがsslプロトコルにしてwssでも、httpsでも通してもらうようにする。