如何在AWS弹性beanstalk上自定义nginx以对Meteor进行负载均衡?

agi*_*urg 15 nginx amazon-web-services node.js meteor amazon-elastic-beanstalk

我在AWS Elastic Beanstalk上运行Meteor.一切都正常运行,除了它没有运行带有以下错误的Websockets:

WebSocket connection to 'ws://MYDOMAIN/sockjs/834/sxx0k7vn/websocket' failed: Error during WebSocket     handshake: Unexpected response code: 400 
Run Code Online (Sandbox Code Playgroud)

我的不足之处是添加如下内容:

proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";

到代理配置,通过我的YML配置文件.

通过我的.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";
Run Code Online (Sandbox Code Playgroud)

我已经ssh进入服务器,我可以看到proxy.conf中包含这两行.

当我点击我的网络服务器时,我仍然看到"WebSocket握手期间的错误:"错误.

我的beanstalk负载配置了stick会话和以下端口:

在此输入图像描述 在此输入图像描述

顺便说一句,我确实看到了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

任何帮助表示赞赏

agi*_*urg 15

在AWS付费支持的帮助下,我得到了这个工作.现实情况是我离一些SED合成器不远了.

这是目前的工作(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
Run Code Online (Sandbox Code Playgroud)

除此之外,您还需要进入负载均衡器并将侦听器从HTTP更改为TCP:

在此输入图像描述

这里描述:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.managing.elb.html).