2012-03-19 83 views
0

我想实现一些现有的元素到现有的PHP应用程序。所以我安装了Node.js并将它设置为监听端口让我们说3000作为Nginx服务器当前正在端口80上为我的PHP应用程序提供服务。Nginx + PHP,Node.js和jQuery设置

如此好,节点服务器工作得很好,我可以打它从PHP与cURL。现在的问题是,我需要打开从html(由ngix上的PHP框架serverd)的localhost/index.html中的连接到localhost:3000上的节点服务器的连接。所以这意味着必须跨域Ajax调用,它变得混乱.. 对于那些还没有尝试过,基本上是不可能的(没有丑陋的黑客),以在同一服务器上的子域或不同的端口上进行ajax调用。

有人会看到更好的方式来实现这整个设置?

+1

在NodeJS中编写整个东西? ;) – 2012-03-19 17:19:59

+0

使用WebSockets而不是AJAX调用? – 2012-03-19 17:28:05

+0

是的,我可能,你知道这是否可以解决交叉请求问题? – silkAdmin 2012-03-19 17:34:39

回答

4

您与Nginx走在了正确的道路上。由于您必须保持在同一个域和端口上,因此您可以将某个文件夹请求重定向到您的节点。事情是这样的:

location ~ /ajax/* {             
    proxy_pass http://127.0.0.1:8080;                 
    break;                           
    } 

另一个解决方案是使用CORS:http://enable-cors.org/ 它精美的作品上,除了IE所有现代浏览器。

+0

THanks Mauvis,我用你建议的代理服务器安装了,但现在我被一个缓存问题困住了,nginx服务器似乎是cahing request not mater我如何配置它.. – silkAdmin 2012-03-20 04:25:05

+0

不知道你的意思,但你可以下载Charles调试代理,并发布日志,如果你想我检查出来。你可以在ajax调用中添加一个rand参数(javascript timestamp),以确保它始终有一个新的响应。 – 2012-03-20 07:54:33

1

即使不知道完整的目的,我也不会公开自家酿造的服务器设置。但如果你真的需要,你可以通过脚本标签代理以旧式的方式来完成。 (<script src="http://external.host.com:...")。

您可以将URL参数request_id附加到脚本地址,并让该脚本以if(typeof($)==='object' && typeof($.trigger)==='function')$.trigger('requestCompleted',request_id);的形式返回请求ID。

+0

所以你的意思是我打开与页面加载节点服务器的连接?如果是这样,我不认为我得到了第二部分,请介意澄清我如何以这种方式获取数据?也可能愚蠢的问题,但为什么你不公开节点服务器?如果要在节点中构建整个应用程序,它将不得不被暴露出来吗? – silkAdmin 2012-03-19 17:33:01

+0

他被localhost误导,认为你的客户端通过localhost访问它,而不是通过cURL访问web服务器本地的东西。 – Jason 2012-03-19 17:38:20

+0

@Jason OP谈论节点服务器监听nodeserver.site.com或www.site.com:3000以及请求来自www.site.com。我不认为我错过了任何事情。 @silkAdmin在脚本src中使用URL参数;使用'var data = JSON.stringify();'this'data'变量将数据从节点发送到浏览器,您可以从www.site.com的脚本访问它。这就像实际上包含任何其他脚本。 Google'脚本标签代理'。 就暴露Node而言,Node并不是Apache或者你的主要网络服务器,所以在没有主机防火墙的情况下,它可能会受到各种安全问题的困扰。 – 2012-03-19 20:51:49

0

您可以将其设置为排序 - 反向代理请求...将AJAX调用发送到您的主域,例如example.com/?proxy=live & restofrequest。让nginx将其重写到相应的域:node.js服务器的端口。

+0

我试过,但后来当我提出我的请求(收回你的例子)example.com/?proxy=live&restofrequest我会得到一个302临时移动的错误。 – silkAdmin 2012-03-19 17:46:21

+0

嗯...足够公平,我对nginx URL重写不够熟悉,知道是否有办法解决这个问题。 – Jason 2012-03-19 17:52:28

+0

试试这个反向代理:http:// tumblr。intranation.com/post/766288369/using-nginx-reverse-proxy – Jason 2012-03-20 15:11:41