Nginx + Socket.io + プロキシ

Nginx + Socket.io + プロキシ

いくつかの記事を読んだ後も、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 ネットワーク タブ リクエスト (クリックすると画像がフルサイズで開きます)

Chrome ネットワーク タブ リクエスト

答え1

運用サーバーのファイアウォールによってポート 3000 がブロックされている可能性があります。ローカル開発マシンから次のコマンドを実行して、ポートが開いているかどうかを確認できます。

telnet <ip-address-of-your-production-server> 3000

これにより、運用サーバーのポート 3000 への接続が開かれます。タイムアウトまたは拒否が発生した場合、ポートは開いていません。

関連情報