【问题标题】:Meteor, WebSocket, Nginx 502 Error流星,WebSocket,Nginx 502 错误
【发布时间】:2016-03-14 19:22:47
【问题描述】:

我们正在尝试在 Nginx 后面的 Debian 服务器上运行 Meteor 应用程序。应用程序正在运行,但 http://url/sockjs?info?cb=[random_string] 的 GET 请求返回 502 Bad Gateway

Nginx 配置是这样设置的:

# this section is needed to proxy web-socket connections
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

upstream app_server {
    server 127.0.0.1:3000; # for a web port socket (we'll use this first)
    # server unix:/var/run/app/app.sock;
}

server {
    listen       80;
    server_name  app_server.com;

    charset utf-8;
    client_max_body_size 75M;

    access_log  /var/log/nginx/app.access.log;
    error_log  /var/log/nginx/app.error.log;

    location / {
        proxy_pass http://app_server;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header X-Forwarded-For $remote_addr; # preserve client IP
        proxy_read_timeout 60s;
        keepalive_timeout 65;
        proxy_redirect off;
        # the root path (/) MUST NOT be cached
        if ($uri != '/') {
            expires 30d;
        }
    }
}

我们尝试了各种配置,但无法找出故障所在。 Meteor WebSocket handshake error 400 with nginx 的解决方案也不起作用。

编辑:尝试了在recommended nginx configuration for meteor找到的以下配置,它仍然返回502。

编辑:该应用程序在不从 Meteor CFS 获取图像时工作正常,Meteor CFS 用于通过管理仪表板存储上传的图像。加载图像时,对 domain/sockjs/img_location/cb/xhr_send 的 POST 会导致 502 错误。

【问题讨论】:

  • 也许尝试更改 proxy_pass 以指向您的流星实例并删除上游 app_server?除非您需要负载平衡,否则我想...proxy_pass localhost:3000;也可以看看这个资源:meteorpedia.com/read/nginx
  • @Sparticus 之前尝试过该配置,结果相同。
  • 我注意到您使用的是proxy_set_header Connection $connection_upgrade;...您是否尝试使用proxy_set_header Connection $http_connection; 代替?
  • @Myst 是的,试过了,但仍然遇到同样的错误。已编辑问题并提供额外的调查输入。
  • 你使用的是什么构建包?

标签: meteor nginx websocket


【解决方案1】:

你确定问题真的来自 NGINX 和 websocket 吗?

  • 首先您可以尝试将wcat 作为 websocket CLI 来确保 websocket 是否正常工作
  • 您也可以尝试在控制台中运行应用程序或查看日志(调试/最高级别的详细信息)以查看是否存在潜在错误

【讨论】:

  • 好的,Websockets 工作正常,但经过一些调试后,我收到:pastebin.com/qpAArbyM
  • 您似乎遇到了 cfs 错误。我找到了这个github.com/CollectionFS/Meteor-CollectionFS/issues/664,如果你看看 Aldeed 的最后一条评论,他建议安装一个名为 cfs:http-methods@0.0.30 的包
  • 好的。这解决了这个问题。谢谢你的帮助。请更新您的答案,我会接受。绝对令人毛骨悚然!
【解决方案2】:

根据您的问题编辑,CFS 使用 HTTP 传输作为底层数据传输层。

不幸的是,根据您将 CFS 放入堆栈的方式,您最终可能会得到其依赖项的旧版本和错误版本,即 cfs:http-methods,它有时会尝试结束已经结束的响应,然后将其自身转换为神秘的错误信息。

幸运的是,从 0.0.30 版本开始,该错误已得到解决,为了确保 Meteor 加载该版本作为最低依赖项,您只需编辑您的 .meteor/packages 文件并添加以下内容:

cfs:http-methods@0.0.30

这将确保任何等于或大于 0.0.30 的版本,到目前为止,它是 Atmosphere(流星的软件包服务器)上的最新版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-14
    • 2011-05-14
    • 2019-06-05
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-16
    相关资源
    最近更新 更多