我们正在尝试在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用于通过管理仪表板存储上传的图像。加载图像时,对域/ sockjs / img_location / cb / xhr_send的POST会导致502错误。
答案 0 :(得分:2)
你确定这个问题真的来自NGINX和websocket吗?
答案 1 :(得分:0)
根据您的问题编辑,CFS使用HTTP传输作为底层数据传输层。
不幸的是,根据你如何将CFS放入你的堆栈,你可能会得到一个旧的和错误的依赖版本,即cfs:http-methods
,它有时会尝试结束已经结束的响应,然后转换为自己作为一个神秘的错误信息。
幸运的是,该bug已经解决了版本0.0.30以及确保Meteor加载该版本作为最小依赖项,您只需要编辑.meteor/packages
文件并添加以下内容:
cfs:http-methods@0.0.30
这将确保任何等于或大于0.0.30的版本,此时此版本是Atmosphere上的最新版本(meteor的软件包服务器)。