2012-02-07 37 views

回答

42

我確認,根據我們自己的測試,即在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/

+0

WSS可以與第二個選項一起使用嗎? – whadar 2013-01-15 15:44:56

+1

...有[處理PROXY協議的模塊](http://stackoverflow.com/q/17981943/201952)。 – josh3736 2013-07-31 22:30:31

+0

...或上述模塊的當前活動[fork](https://github.com/findhit/proxywrap)。 – jamix 2015-04-21 12:32:59

10

它不起作用,至少現在ELB的HTTP(S)代理不理解websocket請求,我不知道什麼時候/是否計劃好。

雖然我不確定HAProxy是完全必要的。應該可以放置SSL終止符,例如stud/stunnel,與您的nodejs服務器在相同的實例上並通過該方式傳遞。然後您可以保留ELB,但將其置於TCP模式。

顯然每個實例都有SSL開銷,但從長遠來看,這可能比將SSL卸載到ELB(特別是基於用戶對ELB的SSL性能的評論)更好。

+1

HTTP粘性通常更希望在AWS ELB終止SSL,如果只讓續訂證書在一個地方容易地進行。這也意味着可能存在漏洞的應用程序代碼無法訪問證書。當然,缺點是ELB和應用程序之間的通信是未加密的,但這可以通過VPC和強化的網絡安全來緩解。 – jokeyrhyme 2014-08-26 22:24:04

4

在詹姆斯的回答之後,我做了一些更多的研究並最終轉到了TCP路由,不確定在使用ELB的HTTP隧道(考慮到我不需要粘性)方面存在任何缺點。好處是你不需要做stud/stunnel,因爲ELB爲你提供了。所以最終ELB設置,其中的NodeJS /王菲是在8000端口監聽:

Secure TCP Forward (443) -> Local (8000) 
TCP Forward 80 -> Local(8000) 
+0

缺點是粘滯性和ELB將請求轉發到其他服務器的能力,如果它選擇的當前服務器返回錯誤。 – 2012-06-05 01:19:21

1

您可以使用Application LB來很好地支持websocket。我只是實現我們的最新項目這個想法後,實施了ALB一些技巧:

  1. 開放80端口上所有相關的SG
  2. 就80
  3. 啓用的NodeJS響應HTTP-80要求運行的NodeJS(的NodeJS會升級HTTP請求在後端的WebSocket)
  4. 使ALB目標羣體檢查HTTP-80 &正確平路
  5. 上ALB創建聽衆:http80->http80, https443->http80
  6. CRE吃了ALB監聽規則:http80->target group, https443->target group
  7. 啓用
+1

你是如何配置健康檢查/ ping路徑爲此工作? – BrokenGlass 2016-09-16 03:05:34

+0

我最終爲健康檢查創建了一個單獨的HTTP端點。根據[文檔](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/target-group-health-checks.html),「...健康檢查不支持WebSockets」。 – dskrvk 2016-11-26 17:35:44

+0

@dskrvk您在哪裏以及如何爲您的健康檢查設置了端點?你在爲ALB運行nginx嗎?我處於相同的情況下不運行nginx,現在確定我應該爲健康檢查提供哪些文件以及它應該如何響應? – jdog 2018-02-16 04:22:51

相關問題