這似乎沒有正在工作。我在Amazon ELB後面使用了帶有NodeJS的Faye。當我打開HTTPS時,連接不能再被斡旋。我在這裏找到一個問題沒有答案:https://forums.aws.amazon.com/message.jspa?messageID=283293。任何人都可以得到這個工作?運行我自己的HAProxy實例之外有什麼工作嗎?如何通過HTTPS/SSL獲得Amazon的ELB以使用Web套接字?
回答
我確認,根據我們自己的測試,即在TCP/SSL配置ELB,而不是哦,HTTP/HTTPS,使得使用WebSockets的伎倆。缺點是兩個:
1)正如arturnt指出的,你不能得到粘性。
2)您將失去檢索客戶身份的能力。您的WebSocket服務器看到的始發IP始終是ELB,並且與HTTP/HTTPS配置不同,不會將X-Forwarded-For標頭添加到請求中。
UPDATE 2013年7月:亞馬遜剛剛添加代理協議,這解決了上述缺陷數2支持。使用代理協議,即使在ELB工作在TCP級別而不是HTTP時,也會添加包含客戶端始發IP的標頭。全部細節:http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/enable-proxy-protocol.html
UPDATE 2016年8月:亞馬遜剛剛宣佈了新的AWS應用負載平衡器,支持WebSocket的7層(以及HTTP/2.0和基於內容的路由)。請參閱https://aws.amazon.com/it/blogs/aws/new-aws-application-load-balancer/
它不起作用,至少現在ELB的HTTP(S)代理不理解websocket請求,我不知道什麼時候/是否計劃好。
雖然我不確定HAProxy是完全必要的。應該可以放置SSL終止符,例如stud/stunnel,與您的nodejs服務器在相同的實例上並通過該方式傳遞。然後您可以保留ELB,但將其置於TCP模式。
顯然每個實例都有SSL開銷,但從長遠來看,這可能比將SSL卸載到ELB(特別是基於用戶對ELB的SSL性能的評論)更好。
HTTP粘性通常更希望在AWS ELB終止SSL,如果只讓續訂證書在一個地方容易地進行。這也意味着可能存在漏洞的應用程序代碼無法訪問證書。當然,缺點是ELB和應用程序之間的通信是未加密的,但這可以通過VPC和強化的網絡安全來緩解。 – jokeyrhyme 2014-08-26 22:24:04
在詹姆斯的回答之後,我做了一些更多的研究並最終轉到了TCP路由,不確定在使用ELB的HTTP隧道(考慮到我不需要粘性)方面存在任何缺點。好處是你不需要做stud/stunnel,因爲ELB爲你提供了。所以最終ELB設置,其中的NodeJS /王菲是在8000端口監聽:
Secure TCP Forward (443) -> Local (8000)
TCP Forward 80 -> Local(8000)
缺點是粘滯性和ELB將請求轉發到其他服務器的能力,如果它選擇的當前服務器返回錯誤。 – 2012-06-05 01:19:21
您可以使用Application LB來很好地支持websocket。我只是實現我們的最新項目這個想法後,實施了ALB一些技巧:
- 開放80端口上所有相關的SG
- 就80
- 啓用的NodeJS響應HTTP-80要求運行的NodeJS(的NodeJS會升級HTTP請求在後端的WebSocket)
- 使ALB目標羣體檢查HTTP-80 &正確平路
- 上ALB創建聽衆:
http80->http80, https443->http80
- CRE吃了ALB監聽規則:
http80->target group, https443->target group
- 啓用
你是如何配置健康檢查/ ping路徑爲此工作? – BrokenGlass 2016-09-16 03:05:34
我最終爲健康檢查創建了一個單獨的HTTP端點。根據[文檔](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/target-group-health-checks.html),「...健康檢查不支持WebSockets」。 – dskrvk 2016-11-26 17:35:44
@dskrvk您在哪裏以及如何爲您的健康檢查設置了端點?你在爲ALB運行nginx嗎?我處於相同的情況下不運行nginx,現在確定我應該爲健康檢查提供哪些文件以及它應該如何響應? – jdog 2018-02-16 04:22:51
- 1. 獲得通過套接字
- 2. 獲得使用套接字
- 3. 想通過代理使用JAVA套接字獲得Google主頁
- 4. Amazon Web Service - 通過SNI在ELB上路由流量
- 5. 通過標準的python套接字獲得新的ip的Tor7.0
- 6. 如何通過MSVC上的套接字()創建套接字?
- 7. Linux:如何獲得新創建的套接字的通知?
- 8. Amazon ELB + jmeter
- 9. 如何獲得通過web字體加載字體src網址
- 10. VPC中的Amazon ELB
- 11. 通過套接字
- 12. 是否可以通過Apigee代理Web套接字服務?
- 13. 我可以通過Web套接字動態更新HTML嗎?
- 14. 使用Amazon ELB時的SSL錯誤
- 15. Amazon EC2 - 如何通過AWS API獲得RAM和CPU的使用情況?
- 16. 如何獲得嵌套的字典鍵值以獲得()
- 17. 如何通過Unix套接字與Sinatra Web應用程序進行通信?
- 18. 如何通過Openshift訪問套接字
- 19. 通過TCP套接字的Android發送/接收字節[]通過TCP套接字
- 20. 的Node.js通過套接字
- 21. 如何通過Java中的套接字獲取HTTP響應?
- 22. 如何獲得Amazon的AWS_ACCESS_KEY_ID?
- 23. 如何通過連接獲得Mysql rownum
- 24. 通過Web支持與Erlang的多個套接字連接
- 25. 如何通過ECPublicKey通過java中的套接字
- 26. 如何通過Windows Phone 8.1上的Web套接字發送/接收消息
- 27. 如何通過JavaScript通過TCP套接字進行通信?
- 28. 如何使用WIN32和C++通過套接字發送HBITMAP?
- 29. 如何使用IOUtils.copy通過Java套接字傳輸文件
- 30. 如何使用套接字通過網絡傳輸數據?
WSS可以與第二個選項一起使用嗎? – whadar 2013-01-15 15:44:56
...有[處理PROXY協議的模塊](http://stackoverflow.com/q/17981943/201952)。 – josh3736 2013-07-31 22:30:31
...或上述模塊的當前活動[fork](https://github.com/findhit/proxywrap)。 – jamix 2015-04-21 12:32:59