【发布时间】:2011-01-26 00:51:12
【问题描述】:
我们正在开发一个需要利用 html5 websockets 的 Ruby on Rails 应用程序。目前,可以说我们有两个独立的“服务器”:我们的主应用程序运行在 nginx+passenger 上,以及一个使用 Pratik Naik 的 Cramp 框架(运行在 Thin 上)的单独服务器来处理 websocket 连接。
理想情况下,当需要部署时,我们应该在 nginx+passenger 上运行 rails 应用程序,并且 websocket 服务器将代理在 nginx 后面,因此我们不需要让 websocket 服务器运行在不同的服务器上港口。
问题是,在这个设置中,nginx 似乎过早地关闭了与 Thin 的连接。与瘦服务器的连接成功建立,然后立即关闭并显示 200 响应代码。我们的猜测是 nginx 没有意识到客户端正在尝试为 websocket 流量建立一个长时间运行的连接。
诚然,我对 nginx 配置并不是那么精通,那么,是否可以将 nginx 配置为 websocket 服务器的反向代理?还是我必须等待 nginx 为新的 websocket 握手提供支持?假设要求应用服务器和 websocket 服务器同时监听端口 80,这是否意味着我现在必须在没有 nginx 的单独服务器上运行 Thin?
提前感谢您的任何意见或建议。 :)
-约翰
【问题讨论】:
-
仍在阅读此内容的任何人不接受以下当前答案。 TCP 代理模块运行良好,下面的答案包括如何设置它的链接:github.com/yaoweibin/nginx_tcp_proxy_module 和 letseehere.com/reverse-proxy-web-sockets
标签: ruby-on-rails nginx reverse-proxy websocket thin