2014-11-23 52 views
15

我在AWS Elastic Beanstalk上運行流星。一切都起來,只是它沒有運行的WebSockets與下面的錯誤運行:如何在AWS elastic beanstalk上定製nginx以負載均衡流星?

WebSocket connection to 'ws://MYDOMAIN/sockjs/834/sxx0k7vn/websocket' failed: Error during WebSocket  handshake: Unexpected response code: 400 

我unstanding是添加類似:

proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";

到代理配置,通過我的陽明配置文件。

通過我.exbextension配置文件:

files: 
"/etc/nginx/conf.d/proxy.conf" : 
    mode: "000755" 
    owner: root 
    group: root 
    content: | 
     proxy_set_header  Upgrade   $http_upgrade; 
     proxy_set_header  Connection  "upgrade"; 

我已經通過SSH連接到服務器,我可以看到proxy.conf在它那兩行。

當我打我的網絡服務器時,我仍然看到「WebSocket握手期間的錯誤:」錯誤。

我配置了棍子會議和下面的端口我的魔豆負荷:

enter image description here enter image description here

BTW我沒有看到https://meteorhacks.com/load-balancing-your-meteor-app.html,我想:

Enable HTTP load balancing with Sticky Session on Port 80 Enable TCP load balancing on Port 8080, which allows websocket ,可就是不得到那個工作。

添加另一射擊在一些YAML這並不在這裏工作「:??https://gist.github.com/adamgins/0c0258d6e1b8203fd051

任何幫助表示讚賞

回答

14

在AWS支持的很多幫助下,我得到了這個工作,現實是我離得很近, SED syntaxt。

下面是當前工作(Gist):

option_settings: 

    - option_name: AWS_SECRET_KEY 
    value: <SOMESECRET> 

    - option_name: AWS_ACCESS_KEY_ID 
    value: <SOMEKEY> 

    - option_name: PORT 
    value: 8081 

    - option_name: ROOT_URL 
    value: <SOMEURL> 

    - option_name: MONGO_URL 
    value: <SOMEMONGOURL> 

    - option_name: MONGO_OPLOG_URL 
    value: <SOMEMONGOURL> 

    - namespace: aws:elasticbeanstalk:container:nodejs 
    option_name: ProxyServer 
    value: nginx 

    option_name: GzipCompression 
    value: true 

    - namespace: aws:elasticbeanstalk:container:nodejs:staticfiles 

    option_name: /public 
    value: /public 

    container_commands: 

    01_nginx_static: 
    command: | 
     sed -i '/\s*proxy_set_header\s*Connection/c \ 
       proxy_set_header Upgrade $http_upgrade;\ 
       proxy_set_header Connection "upgrade";\ 
     ' /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf 

除了這一點,你需要鑽進你的負載均衡,並從HTTP更改偵聽器TCP:這裏所描述

enter image description here

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.managing.elb.html)。

+0

注意我確實有一個未解決的問題。將協議交換到TCP時,我必須禁用粘性會話。我有一個開放的問題來了解我是否重新獲得了這一點。 – aginsburg 2014-12-05 04:30:05

+0

好吧,關於websockets在這裏的重要性的討論:https://groups.google.com/forum/#!topic/meteor-talk/M6L_Ihpu-e0如果你有任何輸入請跳轉 – aginsburg 2014-12-08 21:57:19

+0

我目前有一個dev /在未配置負載平衡器的情況下在ebs中登臺實例(伸縮選項設置爲「單實例」)。我認爲這意味着我不需要爲這一步而煩惱? – gb96 2014-12-18 07:40:16

0

你檢查出Meteor WebSocket handshake error 400 with nginx我認爲它們的配置可能是從你的有點不同的我」。在同一條船上與你一樣,試圖讓這個完全相同的設置工作。

+0

感謝您的回覆。是的,我已經看到了這個,但這是一個直線EC2(不是Beanstalk)的例子。我知道配置文件必須發生什麼才能使其工作......我似乎無法獲得YAML Config的權利來實現它。我想我可能需要使用SED來嘗試更新現有的NGINX配置文件,然後添加/添加它們。所以我想我更多地討論語法與實際需要完成的事情。 – aginsburg 2014-12-01 01:10:04

+0

我昨天用AWS開了一個付費支持電話...所以會看到什麼回來。 – aginsburg 2014-12-02 21:21:58