Как настроить nginx на эластичный beanstalk AWS для балансировки Meteor?

Я запускаю Meteor на AWS Elastic Beanstalk. Все работает и запускается, за исключением того, что он не запускает веб-узлы со следующей ошибкой:

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

Мое замечание заключалось в том, чтобы добавить что-то вроде:

proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";

В конфигурацию proxy через мой конфигурационный файл 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";

У меня есть ssh'd на сервере, и я вижу proxy.conf с этими двумя строками в нем.

Когда я попал на свой веб-сервер, я все еще вижу ошибку "Ошибка при попытке квитирования WebSocket:".

У меня есть моя загрузка beanstalk, настроенная с помощью сессий stick и следующих портов:

enter image description hereenter image description here

Кстати, я видел 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

Любая помощь оценивается?

Ответ 1

С большим количеством помощи от платной поддержки 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

В дополнение к этому вам нужно попасть в ваш балансировщик нагрузки и изменить прослушиватель с HTTP на TCP:

enter image description here

описанный здесь: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.managing.elb.html).