2

我已经在 windows server 2012 r2 中成功安装了 Apache2.2.22 和 nodejs 0.10.12。

我使用 nssm 成功地将 node 设置为 Windows 服务,因此它将始终运行。

节点“生活”在 8000 端口中,我已经在 apache 中安装了一个代理,httpd.conf就像这样

ProxyPass /nodejs http://localhost:8000
ProxyPassReverse /nodejs http://localhost:8000

当我在服务器的浏览器中检查我的网站时,websockets 工作正常。

当我在笔记本电脑浏览器中检查我的网站时,我收到错误消息。

我猜它是因为我像这样创建 websockets

 var ci = new WebSocket("ws://localhost:8000");

这就是为什么在服务器上工作,而不是在我的笔记本电脑上工作的原因。由于localhost. 首先,我说的对吗?

第二。唯一的问题是,我不知道如何为 websockets 创建相对路径。我尝试了不同的语法,但没有运气。请,有人可以告诉我如何,并向我解释吗?

提前致谢。

编辑:我没有设置 windows server 2012 r2。一位同事做到了。我刚刚上传了网站。我在 Windows 防火墙中做了一个入站规则,所以端口 8000 是开放的。另外,一个用于端口 80(用于 Apache)。我尝试了 robertklep 建议的东西,但没有运气。也许是操作系统的问题?(安全限制?)

里面httpd.conf我也有

 ProxyPass /geoserver http://localhost:8080/geoserver
 ProxyPassReverse /geoserver http://localhost:8080/geoserver

它在节点的代理之前。它关于 Geoserver 和端口 8080,它也有一个入站规则。工作得很好。

节点仅在本地工作(localhost在 URL 中)。在本地,如果我从中删除Proxyhttpd.conf,仍然有效。

我不知道如何安装/配置proxy_wstunnel_module. 而且我不确定我是否需要它。

我已尽我所能,请指教

谢谢

4

1 回答 1

11

第一:是的,你是对的。

第二:我认为 WebSocket URL 总是必须是绝对的。要动态确定该 URL,您可以使用以下内容:

var ci = new WebSocket('ws://' + location.hostname + ':8000');

我假设您没有使用端口 8000 上的节点服务器来提供 HTML 文件。如果你是,这也可能有效(并且更短一些):

var ci = new WebSocket('ws://' + location.host);
于 2014-01-11T16:07:49.610 回答