簡體   English   中英

將Websocket與彈性beantalk,nginx和node.js一起使用時出現問題

[英]Issue using websocket with elastic beanstalk, nginx and node.js

我正在嘗試在EB上使用sock.js部署node.js應用程序。 Websockets無需代理即可正常工作。 使用Nginx代理時,出現ws連接問題。 我已經添加了.ebextensions / .config文件:

files:
  "/etc/nginx/conf.d/wssproxy.conf":
    mode: "000644"
    owner: root
    content: |
      map $http_upgrade $connection_upgrade {
        default upgrade;
        ''      close;
      }
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection $connection_upgrade;

Websockets不起作用,但是nginx錯誤日志顯示:

上游過早關閉連接,同時讀取上游,客戶端:83.219.138.215,服務器:,請求:“ POST x / XXXXX / 432 / 2l4e2j6v / xhr_streaming HTTP / 1.1”,上游:“ http://xxx.0.0.1:8081 / XXXXX / 432 / 2l4e2j6v / xhr_streaming “,主機:” XXXXXX.elasticbeanstalk.com“,引薦來源網址:” http://XXXXXX.elasticbeanstalk.com/

這可能是由於您的負載均衡器未確定地將請求映射到第7層(HTTP)和第4層(websockets)上的上游服務器。 您會注意到,您提供的錯誤消息顯示您正在使用xhr-streaming,該功能適用​​於第7層。我猜測如果僅強制執行websocket協議或HTTP輪詢,這些錯誤將變得更加一致,但它們不會走開。

這是帶有一些可能解決方案的更詳細的說明。 不幸的是,它們都非常討厭實施。 以下問題是針對socket.io的,但是由於您正在使用sockjs,因此, 鑒於sockjs在HTTP輪詢請求路徑中使用服務器特定的ID的情況,理想的解決方案要容易得多

負載均衡Amazon EC2上的節點socket.io

如果可以在ELB上使用確定性負載平衡方法(例如IP或HTTP路徑哈希),所有這些問題都將消失。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM