Meteor, WebSocket, Nginx 502 Error



我们正试图在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握手错误400与nginx也不起作用。

编辑:在推荐的nginx配置中为流星尝试了以下配置,它仍然返回502。

编辑:当未从Meteor CFS获取图像时,该应用程序运行良好,Meteor用于通过管理面板存储上传的图像。加载图像时,POST到domain/sockjs/img_location/cb/xhr_send会导致502错误。

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

  • 首先,您可以尝试将wcat作为websocket CLI,以确保websocket是否正常工作
  • 您也可以尝试在控制台中运行该应用程序,或者查看日志(最高级别的debug/verbose)以查看是否没有潜在错误

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

不幸的是,根据您如何将CFS放入堆栈,您可能会得到一个旧的、有缺陷的依赖关系版本,即cfs:http-methods,它有时会试图结束一个已经结束的响应,然后将其本身转换为一个神秘的错误消息。

幸运的是,这个错误已经在0.0.30版本之后得到了解决,为了确保Meteor将该版本作为最小依赖项加载,您所需要做的就是编辑.meteor/packages文件并添加以下内容:

cfs:http-methods@0.0.30

这将确保任何版本等于或大于0.0.30,截至目前,这是Atmosphere(流星的包服务器)上的最新版本。

相关内容

  • 没有找到相关文章

最新更新