我在nginx集成模式下与乘客一起运行捆绑的Meteor应用程序,除了sockjs回退到XHR请求之外,一切正常。
我在自己的应用和排行榜示例中得到此行为(我还没有测试其他示例)。
您可以使用DISABLE_WEBSOCKETS
环境变量禁用网络套接字来测试它。
该网站的我的nginx配置如下所示
server
{
server_name ng;
root /var/www/mysitename/public;
charset utf-8;
passenger_enabled on;
passenger_set_cgi_param MONGO_URL mongodb://localhost:27017/mydbname;
passenger_set_cgi_param ROOT_URL http://mysitename;
passenger_set_cgi_param DISABLE_WEBSOCKETS 1;
passenger_set_cgi_param PASSENGER_STICKY_SESSION true;
}
然后,当我访问该网站并在Chrome上的开发者控制台中打开网络面板时,我会收到类似这样的错误
...
POST http://mysitename/sockjs/158/ck8pi__5/xhr_send 404 (Not Found)
POST http://mysitename/sockjs/519/4hgc4rgr/xhr_send 404 (Not Found)
POST http://mysitename/sockjs/672/6gq99fp5/xhr_send 404 (Not Found)
POST http://mysitename/sockjs/682/sx0e2w_v/xhr_send 404 (Not Found)
...
基本上它继续创建新连接,就像它无法继续现有连接一样,这似乎只发生在XHR请求中,而不是websockets,因为我猜XHR需要粘性会话状态。
但我已启用了粘性会话(PASSENGER_STICKY_SESSION
environmental variable)并在资源窗格中看到了会话Cookie,但它仍然存在相同的404问题。
我在Arch Linux 64位上使用Phusion Passenger版本4.0.40和Meteor 0.8.1.2。
答案 0 :(得分:1)
Phusion Passenger作者在这里。这是由Phusion Passenger中的一个问题引起的,Github issue 1198详细记录了该问题。目标是在下一个版本4.0.45中完成所有这些工作。
粘性会话是必要的。我们将添加有关Meteor的文档以及启用粘性会话的必要性。