2016-01-15 36 views
1

我有两个网站:HTTP和单独的服务器上的NodeJS

1)httpwebsite.com在哪里运行,它使用了Apache,PHP和MYSQL我的网络应用程序;

2)wss.com我运行一个nodeJS websocket服务器,用于多人游戏;

我想在httpwebsite.com上托管与websocket服务器通信的javascript客户端文件,因此我不必在nodeJS上配置http服务器,原因很多,如安全性和缺乏使用经验nodeJS作为HTTP服务器。

我想只为websocket服务器使用nodeJS,出于性能和灵活性等原因。

我听说同源策略限制了httpwebsite.com与wss.com的通信,但是可以重新配置为实际允许两个不同域之间的通信,这两个域之间有意通信?

除了在nodeJS服务器上实际运行HTTP服务器以外,还有其他选择吗?

回答

0

2个选择:

  1. 您可以添加CORS标头wss.com允许访问website.com加载它的资源。马特给出的链接应该解释这是如何工作的,你只需要将这个HTTP头添加到你需要访问的每个节点服务器。

  2. 您可以通过Apache服务器将您的请求代理到节点服务器。因此,网络浏览器认为它正在与同一来源的服务通话。这通常只用于公开提供Web服务器,并且您的应用程序服务器(运行节点)不直接可用并受防火墙保护 - 尽管显然Apache需要能够访问它。

您可以使用此配置在Apache中实现选项2,http://website.com/api呼叫转移到对端口wss.com运行3000

#send all /api requests to node 
ProxyPass /api http://wss.com:3000 
#Optionally change all references to wss.com to this domain on return: 
ProxyPassReverse /api http://wss.com:3000 
+0

我的目标是不涉及1两台服务器服务请求。通过Apache作为中介服务器来实现这一点感觉就像Apache将具有与NodeJS服务器几乎相同的负载。我的想法是使用Apache来提供静态文件(在播放器登录和其他简单的事情之后),然后让NodeJS处理“游戏负载”。也许我错了,也许你的解决方案不涉及为转发添加太多的负载到Apache。你能评论这个吗? – NVG

+0

然后使用CORS。但是,正如我所说这是一个相当常见的用例,并且Apache仅负责转发请求的负载将可以忽略不计。 Web服务器专门用于处理高负载。特别是如果他们只是提供静态内容和/或代理请求,而不是自己做很多处理。另外它还可以为安全性和性能提供额外的好处例如。 SSL终端可以在一个点上,而不是在每个节点服务器上都有SSL,更少的端口需要向全世界开放(通常只有端口80和443),其他功能如WAF可以安装......等等。 –

相关问题