
閱讀了幾篇文章後,我仍然無法透過 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
Express 伺服器的連接方式:
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 的連線。如果逾時或拒絕,則連接埠未開啟。