2014-11-23 3 views
15

Я бегу Meteor на AWS Elastic Beanstalk. Все и работает кроме того, что он не работает WebSockets со следующей ошибкой:Как настроить nginx на эластичный beanstalk AWS для балансировки Meteor?

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";

к прокси-конфигурации, через мой конфигурационный файл 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 нагрузка сконфигурировано с палкой сессий и следующие порты:

enter image description here enter 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

Любая оцененная помощь

ответ

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

+0

ОК, обсуждение того, как важны веб-узлы здесь: https://groups.google.com/forum/#!topic/meteor-talk/M6L_Ihpu-e0, если у вас есть какие-либо данные, пожалуйста, входите в – aginsburg

+0

У меня в настоящее время есть dev/промежуточного экземпляра в ebs без настройки балансировки нагрузки (для параметра масштабирования установлено значение «один экземпляр»). Я полагаю, это означает, что мне не нужно беспокоиться об этом шаге? – gb96

0

Вы проверили Meteor WebSocket handshake error 400 with nginx я думаю, что их конфигурация может быть немного отличается от вашего I». м в той же лодке, что и вы, пытаясь получить эту то же самое настроенное рабочее положение.

+0

Спасибо за ответ. Да, я видел это, но это прямой пример EC2 (не Beanstalk). Я знаю, что должно произойти с конфигурационным файлом, чтобы заставить его работать ... Я просто не могу получить право YAML Config, чтобы заставить его заняться. Я думаю, что мне может понадобиться использовать SED вместо этого, чтобы попытаться обновить существующие файлы конфигурации NGINX и добавить/добавить к ним. Поэтому я думаю, что я больше спрашиваю о синтаксисе и том, что на самом деле нужно сделать. – aginsburg

+0

Вчера я открыл платный призыв поддержки с AWS ... так что посмотрим, что вернется. – aginsburg

Смежные вопросы