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

Posted

技术标签:

【中文标题】将 Socket.IO 与 HTTPS 和 AWS Elastic Beanstalk 一起使用【英文标题】:Using Socket.IO with HTTPS and AWS Elastic Beanstalk 【发布时间】:2020-07-17 21:48:54 【问题描述】:

我有一个使用 nginx 代理由 AWS Elastic 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");
          );

这是我的负载均衡器的配置:

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于将 Socket.IO 与 HTTPS 和 AWS Elastic Beanstalk 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

AWS ElasticBeanstalk + Socket.IO + SSL 问题

Socket.io 无法使用 nodejs 在 aws 上工作

Socket.io + Nginx + AWS Application Load Balancer 连接在建立之前关闭

配置 AWS Elastic Beanstalk Nginx 以使用 socket.io 连接的主要问题

无法使用 React Native 将 Socket io 连接到 https

无法将客户端连接到 AWS 上的远程套接字