2014-11-23 19 views
15

Tôi đang chạy Meteor trên AWS Elastic Beanstalk. Mọi thứ đều lên và chạy ngoại trừ việc nó không chạy Websockets với các lỗi sau:Làm cách nào để tùy chỉnh nginx trên cây đậu nành AWS để cân bằng tải Meteor?

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

unstanding của tôi là thêm một cái gì đó như:

proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";

Để cấu hình proxy, qua tập tin cấu hình YML của tôi .

Via tập tin cấu hình .exbextension tôi:

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

Tôi đã ssh'd vào máy chủ và tôi có thể thấy proxy.conf với những hai dòng trong đó.

Khi tôi nhấn máy chủ web của mình, tôi vẫn thấy lỗi "Lỗi trong quá trình bắt tay WebSocket:".

Tôi có tải cây đậu của tôi cấu hình với phiên thanh và các cổng sau:

enter image description here enter image description here

BTW tôi đã thấy https://meteorhacks.com/load-balancing-your-meteor-app.html và tôi đã cố gắng để:

Enable HTTP load balancing with Sticky Session on Port 80 Enable TCP load balancing on Port 8080, which allows websocket Nhưng dường như không thể làm việc đó.

Thêm một shot tại một số YAML mà KHÔNG làm việc ở đây ":? https://gist.github.com/adamgins/0c0258d6e1b8203fd051

Bất kỳ giúp đánh giá cao

Trả lời

14

Với rất nhiều sự giúp đỡ từ AWS trả tiền hỗ trợ, tôi đã làm việc này.Thực tế là tôi đã không xa nó xuống một số Cú pháp SED

Đây là những gì hiện đang hoạt động (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 

Thêm vào đó bạn cần phải nhận được vào cân bằng tải của bạn và thay đổi Listener từ HTTP để TCP:

enter image description here

mô tả ở đây: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.managing.elb.html).

+0

Lưu ý Tôi có một vấn đề mở. Tôi đã vô hiệu hóa các phiên dính khi trao đổi giao thức với TCP. Tôi có một câu hỏi mở để hiểu nếu tôi nhận được điều này trở lại. – aginsburg

+0

OK, thảo luận về cách các ổ cắm web quan trọng có tại đây: https://groups.google.com/forum/#!topic/meteor-talk/M6L_Ihpu-e0 nếu bạn có bất kỳ đầu vào nào, vui lòng nhảy qua – aginsburg

+0

Tôi hiện có một nhà phát triển/thể hiện dàn trong ebs không có cấu hình cân bằng tải (tùy chọn chia tỷ lệ được đặt thành "trường hợp đơn lẻ"). Tôi đoán điều này có nghĩa là tôi không cần phải bận tâm với bước đó? – gb96

0

Bạn đã kiểm tra ra Meteor WebSocket handshake error 400 with nginx Tôi nghĩ rằng cấu hình của họ có thể là một chút khác biệt so với bạn tôi'. m trong cùng một chiếc thuyền như bạn, cố gắng để có được chính xác cùng một thiết lập này làm việc

+0

Cảm ơn bạn đã phản hồi. Vâng, tôi đã nhìn thấy điều này nhưng đây là một ví dụ EC2 (không phải Beanstalk) thẳng. Tôi biết những gì đã xảy ra với tập tin cấu hình để làm cho nó hoạt động ... Tôi chỉ có thể không có vẻ để có được quyền YAML Config để có được nó để có. Tôi nghĩ rằng tôi có thể cần phải sử dụng SED thay vì thử và cập nhật các tệp cấu hình NGINX hiện có so với chắp thêm/thêm vào chúng. Vì vậy, tôi nghĩ rằng tôi đang yêu cầu nhiều hơn về cú pháp so với những gì thực sự cần phải được thực hiện. – aginsburg

+0

Tôi đã mở một cuộc gọi hỗ trợ trả phí với AWS hôm qua ... vì vậy sẽ thấy điều gì xảy ra. – aginsburg

Các vấn đề liên quan