【发布时间】:2019-11-12 14:50:36
【问题描述】:
我一直在尝试在我的家庭 Ubuntu 服务器上部署我的聊天应用程序。当我使用内部 ip 或本地服务器主机名连接到它时,它在本地工作。
我正在使用 nginx 反向代理从 http://localhost:3000 切换到我的外部域,以便我可以通过互联网从外部访问它:http://tfmserver.dynu.net/
Nginx 代理:
server {
listen 80;
listen [::]:80;
root /var/www/tfmserver.dynu.net/html;
index index.html index.htm index.nginx-debian.html;
server_name tfmserver.dynu.net;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
我似乎收到类似于以下的错误,但有时会有所不同,具体取决于我尝试修复它的方法:
WebSocket connection to 'ws://tfmserver.dynu.net/socket.io/?EIO=3&transport=websocket&sid=wQY_D0JOZm4VWGXgAAAA' failed: Error in connection establishment: net::ERR_CONNECTION_TIMED_OUT
或
POST http://tfmserver.dynu.net/socket.io/?EIO=3&transport=polling&t=MklujE_&sid=fbdZir8lxOlMOZm6AAAA net::ERR_CONNECTION_TIMED_OUT
根据人们发布的一些关于此错误的帖子,他们说 Chrome 正在尝试将其作为 SSL,但并未以这种方式提供服务,但是我已将 SSL 添加到服务器并添加到项目中,但它不能解决问题。目前我已将其删除,但如果可能的话,我不介意在它工作后将其重新添加。
我已经尝试了这里发布的所有其他可能的问题,但没有一个可以解决问题。
我怎样才能让它在外部工作?我做错了什么?
这里是套接字项目的相关部分。如果您需要任何其他可以提供帮助的信息,请告诉我 - 提前致谢!
服务器:
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);
server.listen(process.env.PORT || 3000, 'localhost');
客户:
var socket = io.connect();
更新:-注意:我刚刚从我的工作计算机连接到它,它可以工作吗?!但是尝试使用外部地址时它在我自己的网络中不起作用?这是怎么回事?
【问题讨论】:
-
也许您的外部地址的 DNS 记录尚未传播到您的家庭网络?我可以很好地点击外部地址?????????
-
我添加 DNS 已经一个星期了,它已经传播了。它将外部加载到另一个网络上,但在同一网络上时我无法使用外部域。在我的工作电脑上工作。但是通过下面的修复,问题不再存在,但现在导致了一个差异问题,使其不再工作......
标签: node.js ubuntu nginx socket.io reverse-proxy