2012-03-15 33 views
0

我在同一臺服務器上有兩個不同的應用程序。其中一個在80端口(mydomain.com)上運行,另一個在端口443(sub.mydomain.com)上運行並具有通配符證書。Nginx + SSL + Rails + Juggernaut(Node.js)+ Engineyard

第一個應用程序僅用於信息目的,不需要websockets支持。 第二個應用程序應該有安全的websockets支持(wss協議)。

我試着在engineyard雲上爲我的rails應用程序和nginx服務器設置juggernaut gem(用於websockets),但是我遇到了一個問題。 Engineyard雲只提供兩個打開的端口:80和443.我知道nginx並不完全支持http 1.1反向代理,所以我不能使用nginx中的代理將websockets請求重定向到特定的本地端口(在我的情況下,這個端口是8080)。

我試過使用HAProxy,它適用於我,當我只使用不安全的websockets,但我需要支持安全的websockets。正如我所知,在這種情況下,我應該使用類似STunnel的東西來挖掘我的https請求並使用HAProxy,但是當我測試它時 - 我發現服務器必須工作幾次,而且我仍然不能使用安全套接字連接:(

也許我做錯了什麼?也許有人會告訴如何設置nginx的多個應用程序(其中一個應該通過https工作)和安全的websockets使用只有兩個端口(80和443)

ps我還使用了一個node-http-proxy,在這種情況下,我可以爲不同的nginx應用程序設置代理,但是我沒有運行websockets(只發生在通過nginx的「handshake」中,而不是「切換協議「)

+0

我絕對不知道如何解決你的問題(對不起),但我*可以*建議在ServerFault(也許超級用戶)上提出這個問題,因爲那些人​​羣可能會更好地裝備回答:) – 2012-03-15 20:07:32

回答

0

我在不久之前對各種反向代理和websocket進行了一些研究。底線是websocket是新的,現在對它的反向代理支持很差。

我看到的建議和我同意的是,您應該在不同的堆棧上運行您的websocket,而不是其餘的項目。這通常意味着將其放在單獨的域或子域中。

您仍然必須處理獲取反向代理的複雜性,但如果您不必擔心打破其他內容,它將變得更加簡單。

此外,我同意,也許你會得到更好的答案在serverfault或超級用戶。