6

nginx の Web サイトで説明されているように、nginx でこれらの設定を使用して、websocket を NodeJS サーバーにプロキシしました。

location /socket.io/ {
    proxy_pass http://backend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

すべて正常に動作し、socket.emit() / socket.on() は互いにメッセージを送信します。かなり大きなテキスト メッセージ (26 kB の html) を送信するまで。

  • この大きなメッセージは NodeJS によって受信されません (したがって、問題は nginx 側にあると思います)
  • nginx ログにエラーはありません
  • この大きなメッセージがクライアントから送信されると、NodeJS はこのクライアントからの socket.io のハートビートの受信を停止します。

私は何を間違っていますか?私が認識していないnginx設定はありますか?

4

2 に答える 2

4

見つかった「解決策」は、haproxyを使用して、tcp ストリームを nginx と NodeJS の間で分割することです。

スタックにさらに別のプログラムを追加するため、最適ではありませんが、機能します。

nginx websocket のサポートは、まだ本番対応にはほど遠いようです。

于 2013-05-21T09:53:16.070 に答える