Node.js socket.io连接错误-';会话ID未知';
我有一个“弹性Beanstalk”环境,可扩展服务器运行2个Ec2实例 在我的根目录下,我使用PHPAPI(使用API文件夹中的Codeigniter)提供angular 7内容。我的节点文件夹中有socket.io聊天模块 我正在使用Nginx在单个EB环境中设置节点和PHP项目 根据一些研究,我通过修改我的Nginx.conf文件尝试了不同的选择,但无法解决问题 这里是我的Nginx.CONF为SOCKET.IO设置文件Node.js socket.io连接错误-';会话ID未知';,node.js,amazon-web-services,nginx,socket.io,amazon-elastic-beanstalk,Node.js,Amazon Web Services,Nginx,Socket.io,Amazon Elastic Beanstalk,我有一个“弹性Beanstalk”环境,可扩展服务器运行2个Ec2实例 在我的根目录下,我使用PHPAPI(使用API文件夹中的Codeigniter)提供angular 7内容。我的节点文件夹中有socket.io聊天模块 我正在使用Nginx在单个EB环境中设置节点和PHP项目 根据一些研究,我通过修改我的Nginx.conf文件尝试了不同的选择,但无法解决问题 这里是我的Nginx.CONF为SOCKET.IO设置文件 server { listen 80; server_
server {
listen 80;
server_name sub.domain.com;
root /var/app/current/node;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_read_timeout 3600;
proxy_connect_timeout 3600;
proxy_redirect off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
proxy_set_header Host $host;
}
}
我的套接字.io代码
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var port = 3000;
var socketController = require('./socketController.js')
app.get('/', function (req, res) {
res.sendFile(__dirname + '/index.html');
});
var nsp = io.of('/namespace');
/**
* Socket for chat message
*/
io.on('connection', function (socket) {
socket.on('client_user_join', socketController.userJoin.bind(null, socket, nsp, io));
socket.on('client_send_chat_message', socketController.sendChatMessage.bind(null, socket, nsp, io));
socket.on('client_received_chat_message', socketController.receivedChatMessage.bind(null, socket, nsp, io));
socket.on('disconnect', socketController.disconnect.bind(null, socket));
});
http.listen(port, function () {
console.log('listening on *:' + port);
});
我在初始控制杆上获得了会话ID未知
,几分钟后我获得了失败:WebSocket握手时出错:意外响应代码:400
我的套接字连接链接
https://sub.domain.com/socket.io/?EIO=3&transport=polling&t=Mtzwcpj&sid=TSMAaNI0KxDuzcIEAA4s
我已经尝试了以下选项
尝试使用不同的传输连接套接字服务器。this.socket=io('https://sub.domain.com/namespace“,{transports:['websocket']})代码>
在AWS侧,启用粘性至1天
我不知道它是被Nginx配置阻塞的,还是我必须使用Radis来解决这个问题,因为我有两个EC2实例正在运行。我使用的Nginx配置有proxy\u http\u version 1.1代码>@RolandStarke我也尝试过这个选项,但没有成功。它在本地有效吗<代码>var nsp=io.of('/namespace')代码>似乎有点奇怪,因为您不使用该变量。但我想这只是针对这个问题。是的,它在本地工作,因为我在本地没有不同的服务器,也没有NginxDo非websocket请求工作,例如app.get('/',
(因此访问https://sub.domain.com/
提供\uu dirname+'/index.html'
文件?)https是在其他地方处理的吗?我使用的nginx配置没有太多阅读,它有proxy\u http\u version 1.1;
@RolandStarke我也尝试过这个选项,但没有成功。它在本地工作吗?var nsp=io.of(“/namespace”);
似乎有点奇怪,因为你没有使用这个变量。但我想这只是为了这个问题。是的,它在本地工作,因为我在本地没有不同的服务器,也没有NginxDo非websocket请求工作,例如,app.get(“/”,
(所以访问https://sub.domain.com/
提供\uu dirname+'/index.html'
文件?)https是在其他地方处理的吗?