将Socket.IO与HTTPS和AWS Elastic Beanstalk一起使用

问题描述 投票:0回答:1

我有一个使用nginx代理托管AWS AWS Beanstalk的网站,并且一直在尝试使用Socket.IO,但是当页面尝试建立连接时,我收到Firefox can’t establish a connection to the server at wss://my-domain.com/socket.io/?EIO=3&transport=websocket&sid=WKtOGhLspneTExRLAAAB和400响应代码的错误消息。

这是节点服务器的创建方式和发出事件的方式:

const express = require("express");
const app = express();

const server = app.listen(8081, () => {
    console.log("Server started on port " + port);
});
const io = require("socket.io")(server);

app.route("/api/listener").post((req, res) => {
    io.emit("response", req.body.Status);
    res.sendStatus(200);
});

这是客户端尝试连接的方式:

const io = require("socket.io-client");

let socket = io("https://my-domain.com");
socket.on("response", 
          function() {
              console.log("Response received");
          });

这是我的负载均衡器的配置:classic load balancer config

我已经尝试过其他类似问题的建议,例如将协议更改为SSL并将实例协议更改为TCP,但这使站点无法访问。我在Nginx的配置中确实设置了proxy_set_header Connection "upgrade"proxy_set_header Upgrade $http_upgrade

amazon-web-services nginx socket.io amazon-elastic-beanstalk
1个回答
0
投票

我找到了针对自己情况的解决方案。我以前的Elastic Beanstalk环境是使用Classic负载均衡器设置的;我已经使用应用程序负载平衡器和以下配置将网站迁移到了新的Elastic Beanstalk环境:

alb config

© www.soinside.com 2019 - 2024. All rights reserved.