Socketio 不会从托管站点连接到 Droplet
Socketio won't connect from hosted site to droplet
我有一个数字海洋水滴运行正在使用 pm2 运行 连接 nodeJS 服务器。当我 运行 我的 preact 应用程序在本地 io.connect 设置为
io.connect('app.ardilabs.com:9080');
app.ardilabs.com 是 nodeJS 服务器所在的位置。
本地 运行 网络应用程序将从 D.O 连接到远程服务器。然后将使用我正在使用 Postman POSTing 的数据更新我的应用程序。
当我尝试构建应用程序并将其放在同一个 D.O droplet 上并使用 nginx 提供应用程序时,应用程序将在您转到 URL 时加载,但它不会连接到 nodeJS 服务器。当我尝试 POST 某些东西时,我从服务器得到确认,它收到了我的数据,但它从未转发到应用程序。
为什么它可以在本地和远程服务器上工作,但当我托管应用程序并使用 nginx 提供服务时却不能?我真的很困惑。
这里是相关的服务器代码:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies
// routes will go here
io.on('connection', function(socket){
//We need a connection but we don't need to do anything about it
});
// start the server
http.listen(9080, function() {
console.log('listening on *:9080');
});
这里是相关的客户端代码:
import io from 'socket.io-client';
const socket = io.connect('app.ardilabs.com:9080');
一些额外的注意事项:
- 我正在使用 nginx 作为我的网络服务器
- 我的网站有 Let's Encrypt 的证书
如果我遗漏了任何需要的信息,请告诉我!
我知道问题出在哪里了。
一旦我在我的 nginx 服务器上放置了一个证书,我就没有意识到我需要将我的 express 服务器配置为也使用 HTTPS。一旦我在 express 服务器上启用 HTTPS,数据就会很好地传输到连接的网络应用程序。
我有一个数字海洋水滴运行正在使用 pm2 运行 连接 nodeJS 服务器。当我 运行 我的 preact 应用程序在本地 io.connect 设置为
io.connect('app.ardilabs.com:9080');
app.ardilabs.com 是 nodeJS 服务器所在的位置。
本地 运行 网络应用程序将从 D.O 连接到远程服务器。然后将使用我正在使用 Postman POSTing 的数据更新我的应用程序。
当我尝试构建应用程序并将其放在同一个 D.O droplet 上并使用 nginx 提供应用程序时,应用程序将在您转到 URL 时加载,但它不会连接到 nodeJS 服务器。当我尝试 POST 某些东西时,我从服务器得到确认,它收到了我的数据,但它从未转发到应用程序。
为什么它可以在本地和远程服务器上工作,但当我托管应用程序并使用 nginx 提供服务时却不能?我真的很困惑。
这里是相关的服务器代码:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies
// routes will go here
io.on('connection', function(socket){
//We need a connection but we don't need to do anything about it
});
// start the server
http.listen(9080, function() {
console.log('listening on *:9080');
});
这里是相关的客户端代码:
import io from 'socket.io-client';
const socket = io.connect('app.ardilabs.com:9080');
一些额外的注意事项:
- 我正在使用 nginx 作为我的网络服务器
- 我的网站有 Let's Encrypt 的证书
如果我遗漏了任何需要的信息,请告诉我!
我知道问题出在哪里了。
一旦我在我的 nginx 服务器上放置了一个证书,我就没有意识到我需要将我的 express 服务器配置为也使用 HTTPS。一旦我在 express 服务器上启用 HTTPS,数据就会很好地传输到连接的网络应用程序。