Meteor,WebSocket,Nginx 502错误

10
我们正在尝试在Debian服务器上使用Nginx运行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握手错误400与nginx的解决方案也没有起作用。

编辑:尝试了在Meteor推荐Nginx配置中找到的配置,但仍然返回502。

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


也许尝试将proxy_pass更改为指向您的meteor实例并删除upstream app_server?除非您需要负载均衡,否则我想...proxy_pass http://localhost:3000; 还可以查看这个资源:http://www.meteorpedia.com/read/nginx - Brett McLain
@Sparticus之前尝试过那个配置,结果是一样的。 - mrkre
我注意到你正在使用 proxy_set_header Connection $connection_upgrade; ... 你尝试过使用 proxy_set_header Connection $http_connection; 吗? - Myst
@Myst 是的,我试过了,但仍然得到相同的错误。已经编辑了问题并提供了额外的输入以进行调查。 - mrkre
你正在使用哪个构建包? - Camron_Godbout
2个回答

3

您确定问题确实来自NGINX和websocket吗?

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

好的,Websockets 工作正常,但经过一些调试后,我收到了这个:http://pastebin.com/qpAArbyM - mrkre
似乎您在使用cfs时遇到了错误。我找到了这个链接 https://github.com/CollectionFS/Meteor-CollectionFS/issues/664 ,如果您查看Aldeed的最后一条评论,他建议安装一个名为cfs:http-methods@0.0.30的包。 - samidarko
好的,问题已经解决了。感谢您的帮助。请更新您的答案,我会接受它。绝对让人抓狂! - mrkre

1
根据您的问题编辑,CFS使用HTTP传输作为底层数据传输层。不幸的是,根据您如何将CFS添加到堆栈中,您可能会得到其依赖项(即cfs:http-methods)的旧版本和有缺陷版本,有时会尝试结束已经结束的响应,然后将其自身翻译为神秘的错误消息。幸运的是,从0.0.30版本开始已解决此错误,并且为了确保Meteor将其加载为最小依赖项,您只需编辑您的.meteor/packages文件并添加以下内容:
cfs:http-methods@0.0.30

这将确保任何版本都等于或大于0.0.30,目前在Atmosphere(Meteor的软件包服务器)上是最新版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接