2014-11-23 51 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