将 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 连接的主要问题