2012-03-19 85 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