0

我在同一台服务器上有两个不同的应用程序。其中一个在 80 端口 (mydomain.com) 上运行,另一个在端口 443 (sub.mydomain.com) 上运行,并具有通配符证书。

第一个应用程序仅供参考,不需要 websockets 支持。第二个应用程序应该有安全的 websockets 支持(wss 协议)。

我尝试使用engineyard云上的nginx服务器为我的rails应用程序设置juggernaut gem(用于websockets),但我有一个问题。Engineyard cloud 只提供两个开放端口:80 和 443。我知道 nginx 不完全支持 http 1.1 反向代理,所以我不能使用 nginx 的代理将 websockets 请求重定向到特定的本地端口(在我的情况下,这个端口是8080)。

我尝试使用 HAProxy,当我只使用不安全的 websockets 时它对我有用,但我需要支持安全 websockets。正如我所知,在这种情况下,我应该使用 STunnel 之类的东西来传输我的 https 请求而不是使用 HAProxy,但是当我测试它时 - 我看到服务器的工作速度必须慢几倍,而我仍然无法使用安全套接字联系 :(

也许我做错了什么?也许有人会告诉如何为多个应用程序设置 nginx(其中一个应该通过 https 工作)并仅使用两个端口(80 和 443)保护 websockets。

ps我也使用了node-http-proxy,在这种情况下,我能够为不同的nginx应用程序设置代理,但我没有运行websockets(仅发生在通过nginx的“握手”,而不是“切换协议”)

4

1 回答 1

0

不久前,我对各种反向代理和 websocket 进行了一些研究。底线是 websockets 是新的,现在对它的反向代理支持很差。

我看到并同意的建议是,您应该在与其他项目不同的堆栈上运行您的 websocket。这通常意味着将其放在单独的域或子域中。

你仍然需要处理让反向代理工作的复杂性,但如果你不必担心破坏其他东西,它就会变得不那么复杂。

另外,我同意您可能会在 serverfault 或超级用户处获得更好的答案。

于 2012-03-21T20:08:14.267 回答