2014-11-23 9 views
15

Używam Meteor na AWS Elastic Beanstalk. Wszystko jest i działa poza tym, że to nie działa WebSockets z powodu następującego błędu:W jaki sposób mogę dostosować nginx do elastycznej fasoli AWS, aby załadować zbalansowany Meteor?

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

Moja unstanding było dodać coś takiego:

proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";

Do konfiguracji proxy, za pośrednictwem mojego pliku konfiguracyjnym yml .

Via moim pliku konfiguracyjnym .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"; 

Mam ssh'd do serwera i widzę proxy.conf z tych dwóch linii w nim.

Po trafieniu na serwer wciąż widzę błąd "Błąd podczas uzgadniania WebSocket:".

Mam obciążenie beanstalk skonfigurowany z sesji samoprzylepnych oraz następujących portów:

enter image description here enter image description here

BTW ja widziałem https://meteorhacks.com/load-balancing-your-meteor-app.html i próbowałem:

Enable HTTP load balancing with Sticky Session on Port 80 Enable TCP load balancing on Port 8080, which allows websocket Ale nie wydaje się też to działa.

Dodanie kolejnego strzału w pewnym YAML że nie działa tu ":? https://gist.github.com/adamgins/0c0258d6e1b8203fd051

Każda pomoc docenione

Odpowiedz

14

Z DUŻĄ pomocą z AWS zapłaciłem wsparcie, mam to działa.Teraz jest, nie byłem daleko, to było do niektórych Składnia SED:

Oto co obecnie pracuje (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 

Oprócz tego trzeba wsiadł do swojej równoważenia obciążenia i zmienić Listener z HTTP TCP:

enter image description here

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

+0

Uwaga Mam jeden otwarty problem. Musiałem wyłączyć sesje lepkie przy zamianie protokołu na TCP. Mam otwarte pytanie do zrozumienia, jeśli je odzyskasz. – aginsburg

+0

OK, dyskusja o tym, jak ważne websockets jest tutaj: https://groups.google.com/forum/#!topic/meteor-talk/M6L_Ihpu-e0 jeśli masz jakieś wejście, proszę przeskoczyć – aginsburg

+0

Obecnie mam dev/instancja przemieszczania w ebs bez skonfigurowanego równoważnika obciążenia (opcja skalowania jest ustawiona na "pojedyncze wystąpienie"). Zakładam, że oznacza to, że nie muszę zawracać sobie głowy tym krokiem? – gb96

0

Czy wyrejestrowany Meteor WebSocket handshake error 400 with nginx myślę, że ich konfiguracja może być nieco inna od zamierzonej ja”. m na tej samej łodzi co ty, próbując uzyskać tę samą konfigurację działającą

+0

Dzięki za odpowiedź. Tak, widziałem to, ale jest to prosty przykład EC2 (nie Beanstalk). Wiem, co musi się stać z plikiem konfiguracyjnym, aby to działało ... Po prostu nie mogę uzyskać odpowiedniej konfiguracji YAML, aby to zrobić. Myślę, że może potrzebować użyć SED zamiast tego, aby spróbować zaktualizować istniejące pliki konfiguracyjne NGINX vs dodawać/dodawać do nich. Więc myślę, że pytam więcej o składnię vs to, co faktycznie musi być zrobione. – aginsburg

+0

Wczoraj otworzyłem płatną rozmowę pomocy technicznej z AWS ... więc zobaczę, co wróci. – aginsburg

Powiązane problemy