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.jsExpress 伺服器的連接方式:

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 的連線。如果逾時或拒絕,則連接埠未開啟。

相關內容