Nginx+;PHP、Node.js和jQuery设置

Nginx+;PHP、Node.js和jQuery设置,php,jquery,node.js,nginx,Php,Jquery,Node.js,Nginx,我想在现有的PHP应用程序中实现一些活动元素。因此,我安装了Node.js并将其设置为在端口上侦听,比如说3000,因为Nginx服务器目前正在端口80上为我的PHP应用程序提供服务 到目前为止还不错,节点服务器工作得很好,我可以用cURL从php中找到它。现在的问题是,我需要打开一个从html(ngix上的PHP框架提供的服务器)到localhost/index.html的连接,连接到localhost:3000的节点服务器。因此,这意味着必须进行跨域ajax调用,这会变得一团糟。。 对于那些

我想在现有的PHP应用程序中实现一些活动元素。因此,我安装了Node.js并将其设置为在端口上侦听,比如说3000,因为Nginx服务器目前正在端口80上为我的PHP应用程序提供服务

到目前为止还不错,节点服务器工作得很好,我可以用cURL从php中找到它。现在的问题是,我需要打开一个从html(ngix上的PHP框架提供的服务器)到localhost/index.html的连接,连接到localhost:3000的节点服务器。因此,这意味着必须进行跨域ajax调用,这会变得一团糟。。 对于那些没有尝试过的人来说,在同一台服务器上的子域或不同端口上进行ajax调用基本上是不可能的(如果没有丑陋的黑客攻击)


有谁能找到更好的方法来实现整个设置吗

即使不知道其全部用途,我也不会公开自制的服务器设置。但是如果你真的需要,你可以用老式的方式,通过脚本标记代理。(
即使不知道它的全部用途,我也不会公开一个自制的服务器设置。但是如果你真的需要,你可以用老式的方式,通过脚本标记代理来实现。(
您可以将其设置为对请求进行反向代理排序…将AJAX调用发送到您的主域,例如example.com/?proxy=live&restofrequest。让nginx将其重写到相应的域:node.js服务器的端口。

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

使用nginx的路径是正确的。由于您必须保持在同一域和端口上,因此可以将特定文件夹请求重定向到您的节点。类似于以下内容:

  location ~ /ajax/* {                                                  
    proxy_pass http://127.0.0.1:8080;                                                                
    break;                                                                                                        
  }
另一种解决方案是使用CORS:
它在除IE之外的所有现代浏览器上都能很好地工作。

您使用Nginx的路径是正确的。由于您必须保持在相同的域和端口上,您可以将特定的文件夹请求重定向到您的节点。如下所示:

  location ~ /ajax/* {                                                  
    proxy_pass http://127.0.0.1:8080;                                                                
    break;                                                                                                        
  }
另一种解决方案是使用CORS:

它在除IE之外的所有现代浏览器上都能很好地工作。

在NodeJS中编写整个过程?;)使用WebSocket而不是AJAX调用?是的,我可能会,你知道这是否适用于交叉请求问题吗?在NodeJS中编写整个过程?;)使用WebSocket而不是AJAX调用?是的,我可能会,你知道这是否会解决交叉请求问题吗?那么你的意思是我在页面加载时打开与节点服务器的连接?如果是这样,我想我没有得到第二部分,你介意澄清我如何以这种方式获取数据吗?这可能是一个愚蠢的问题,但你为什么不公开节点服务r?如果要在node中构建整个应用程序,它必须被公开,对吗?他被
localhost
误导了,认为你的客户端是通过localhost访问它,而不是PHP通过cURL访问Web服务器的本地内容。@Jason OP谈到节点服务器收听nodeserver.site.com或www.site.com:3000和来自www.site.com的请求。我认为我没有遗漏任何内容。@silkAdmin在脚本src中使用URL参数;使用
var data=JSON.stringify()将数据从节点发送到浏览器
数据
变量您可以从www.site.com的脚本访问它。这就像包括任何其他脚本一样。Google
脚本标记代理
。就公开节点而言,节点不是Apache或您的主Web服务器,因此在没有主机防火墙的情况下,它可能会受到各种安全问题的影响。对不起,我是理解“自制服务器设置”意思是在本地PC上托管你的站点。那么你的意思是我在页面加载时打开与节点服务器的连接?如果是这样,我认为我没有得到第二部分,你介意澄清我如何通过这种方式获取数据吗?这可能是个愚蠢的问题,但为什么你不公开节点服务器?如果要在节点中构建整个应用程序,它必须公开对吗?他被
localhost
误导了,认为你的客户机是通过localhost访问它,而不是通过cURL访问Web服务器本地的PHP。@Jason OP谈到节点服务器监听nodeserver.site.com或www.site.com:3000和来自www.site.com的请求。我不认为我遗漏了什么。@silkAdmin在脚本src中使用URL参数;使用
var data=JSON.stringify()将数据从节点发送到浏览器
数据
变量您可以从www.site.com的脚本访问它。这就像包括任何其他脚本一样。Google
脚本标记代理
。就公开节点而言,节点不是Apache或您的主Web服务器,因此在没有主机防火墙的情况下,它可能会受到各种安全问题的影响。对不起,我是我理解“自制服务器设置”是指在本地PC上托管您的站点。我尝试过,但当我提出请求时(收回您的示例)example.com/?proxy=live&restofrequest我将得到一个302临时移动的错误。嗯……这很公平,我对nginx URL重写还不够熟悉,不知道是否有办法解决这个问题。尝试一下反向代理:我尝试过,但当我请求时(收回你的例子)example.com/?proxy=live&restoreRequest我将得到一个302临时移动错误。嗯……这很公平,而且我对nginx URL重写不太熟悉,不知道是否有办法解决这个问题。尝试一下反向代理:谢谢Mauvis,我已经按照您的建议完成了代理设置,但现在我遇到了缓存问题,nginx服务器似乎有问题不管我是如何配置它的,我都不知道你是什么意思,但是如果你想让我检查的话,你可以下载Charles调试代理并发布日志。你可以添加一个rand参数(javascript时间戳)感谢Mauvis,我按照您的建议完成了一个代理设置,但是现在我遇到了一个缓存问题,nginx服务器似乎