
いくつかの記事を読んだ後も、nginx プロキシ経由で socket.io 通信を機能させることができません。
以下は私のnginx
設定です:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
location ~* \.io {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
}
node.js
私のエクスプレス サーバーの接続方法は次のとおりです。
const express = require('express');
const app = express();
const http = require('http').Server(app);
const io = require('socket.io')(http);
ローカル開発マシンではすべて正常に動作しているようです。onConnection ログ メッセージが表示され、すべての通信も正常に動作しています。
しかし、本番環境では、ブラウザは有効な応答をすべて取得しますが、onConnection ログは表示されず、ソケット経由の通信は機能しません。
Chrome ネットワーク タブ リクエスト (クリックすると画像がフルサイズで開きます)
答え1
運用サーバーのファイアウォールによってポート 3000 がブロックされている可能性があります。ローカル開発マシンから次のコマンドを実行して、ポートが開いているかどうかを確認できます。
telnet <ip-address-of-your-production-server> 3000
これにより、運用サーバーのポート 3000 への接続が開かれます。タイムアウトまたは拒否が発生した場合、ポートは開いていません。