【发布时间】:2018-11-07 08:44:01
【问题描述】:
我有一个场景,我的 node.js 应用程序位于负载平衡 HAProxy 后面,该 HAProxy 将 HTTP 和 HTTPS 流量转发到我的节点服务器上的端口 8000。
不幸的是,这让我陷入了一个棘手的境地:我需要为我的 http 和 https 服务器使用相同的端口。如果这在某种程度上更容易的话,我也会满足于仅仅将 http 重定向到 https。
但是,现在,我不得不选择 HTTP -- 或 -- HTTPS
为了包含代码...
https.createServer(api.credentials, api.server).listen(8000);
http.createServer(api.server).listen(8000); // ERR ADDR IN USE
【问题讨论】:
-
我研究了这个;在节点中几乎不可能做到。我能够完成它的唯一方法是:1)有一个带有 Socket 侦听器的端口,检查前几个字节,然后转发到其他两个端口之一(分别处理 http 和 https),因为没有办法处理关闭现有套接字并创建一个新的 http/httpsrequest。
-
HAProxy 不能为你破解 SSL,在所有情况下都只转发 HTTP 吗?
-
@Joe 这正是我最初所做的...... HAProxy 使用 Apache 的反向代理来服务 SSL 并将 HTTP 发送到节点。但是,我需要使用 WebSockets,这意味着要摆脱 Apache,从而导致我遇到这个问题......
-
为什么需要在同一个端口上同时提供服务?为什么不将 8000 端口用于 HTTP,将 8001 端口用于 HTTPS?
-
@KeithPalmer 这就是 HAProxy 的设置方式。我正在与 RightScale 合作,试图找到一种通过不同端口转发 HTTPS 的方法......看起来应该是可能的,但我希望在节点端有一个解决方案。
标签: node.js