Node.js Socket.IO server.origins始终返回'*';作为原点值(Nodejs)
我正在尝试构建一个双向socket.io服务器/客户端连接。服务器将保留在一个IP/域后面,而客户端将保留在另一个IP后面。关键是在服务器脱机时通知我,以防断电或服务器故障。我遇到的问题是,我正在尝试固定插座,这样就不仅仅是任何人都可以连接到插座。Socket.IO具有server.origins函数,该函数将返回尝试连接的套接字的原点。他们的API文档是这样解释的Node.js Socket.IO server.origins始终返回'*';作为原点值(Nodejs),node.js,sockets,nginx,socket.io,Node.js,Sockets,Nginx,Socket.io,我正在尝试构建一个双向socket.io服务器/客户端连接。服务器将保留在一个IP/域后面,而客户端将保留在另一个IP后面。关键是在服务器脱机时通知我,以防断电或服务器故障。我遇到的问题是,我正在尝试固定插座,这样就不仅仅是任何人都可以连接到插座。Socket.IO具有server.origins函数,该函数将返回尝试连接的套接字的原点。他们的API文档是这样解释的 io.origins((origin, callback) => { if (origin !== 'https://f
io.origins((origin, callback) => {
if (origin !== 'https://foo.example.com') {
return callback('origin not allowed', false);
}
callback(null, true);
});
我遇到的问题是,每当我使用socket.io-client连接到socket.io服务器时,原点总是“*”
在潜在缺陷下,API指出:
在某些情况下,当无法确定原点时,其值可能为*
如何获取socket.io它可以看到套接字连接请求来自的IP吗
一旦建立了连接,我可以使用套接字信息并查看套接字所在的IP,但连接已经建立。我正试图阻止胭脂接触
# Server
const express = require('express');
const app = express();
const chalk = require('chalk')
const server = require('http').createServer(app);
const io = require('socket.io')(server);
const cors = require('cors');
const port = 4424;
app.use(cors());
io.origins((origin, callback) => {
console.log(origin);
if (origin !== '*') {
return callback('origin not allowed', false);
}
callback(null, true);
});
io.on('connection', (socket) => {
console.log('Client connected...');
socket.on('join', (data) => {
console.log(data);
socket.emit('messages', 'Hello from server');
});
})
server.listen(port, () => console.log(chalk.blue(`Express started on port ${port}!`)));
客户:
# Client
const io = require('socket.io-client');
const socket = io('https://"MY DOMAIN THAT THE SERVER IS BEHIND"', { reconnect: true })
socket.on('connect', (data) => {
console.log("Connection successful");
socket.emit('join', 'Hello World from client');
});
socket.on('connect_error', (error) => {
console.log("Connection error");
});
socket.on('disconnect', (timeout) => {
console.log("Connection disconnected");
})
socket.on('messages', (data) => {
console.log(data);
});
我的服务器位于使用SSL的NGINX服务器后面,并与另一个IP上的客户端连接到服务器,它通过并创建连接,但来源始终是“*”事实上,我发现您可以使用带有Socket.io的中间件和io.use()函数。我刚刚编写了一个简单的中间件,它用一个已批准的ip列表检查传入的套接字ip
io.use((socket, next) => {
const ip = socket.handshake.headers['x-forwarded-for']
if (firewall(ip))
{
return next();
}
})
防火墙是一种检查ip是否在已批准ip阵列中的功能
io.use((socket, next) => {
const ip = socket.handshake.headers['x-forwarded-for']
if (firewall(ip))
{
return next();
}
})