2012-03-19 9 views
0

既存のPHPアプリケーションにいくつかのライブ要素を実装したいと思います。だから私はNode.jsをインストールし、Nginxサーバーが現在ポート80で私のPHPアプリケーションを提供しているので、ポートを聞くためにそれを設定します。Nginx + PHP、Node.js、jQueryの設定

それほど良い、ノードサーバーは素晴らしいと私はそれを打つことができますcURLでphpから。問題は、html(ngixのPHPフレームワークでserverd)からlocalhost/index.htmlでlocalhost:3000のノードサーバーに接続を開く必要があることです。だからこれは、クロスドメインのajax呼び出しを行うことを意味し、それは乱雑になります。 基本的に(醜いハッキングなし)サブドメインまたは同じサーバー上の別のポートでajax呼び出しを行うことはできませんでした。

誰もがこの全体の設定を実装するためのよりよい方法を見ていますか?

+1

NodeJSにすべてのことを書いてください。 ;) –

+0

AJAX呼び出しではなくWebSocketを使用しますか? –

+0

はい、これが相互リクエストの問題で機能するかどうかわかりますか? – silkAdmin

答えて

4

あなたはNginxの正しいパスにいます。同じドメインとポートに滞在する必要があるため、特定のフォルダ要求をノードにリダイレクトすることができます。このような何か:

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

は、他のソリューションは、CORSを使用することです:http://enable-cors.org/ それはIE以外のすべての近代的なブラウザで見事に動作します。

+0

あなたはアドバイスのようなプロキシ設定を手伝ってくれましたが、私はキャッシングの問題に悩まされています.nginxサーバーはリクエストを受け付けていないようですどのように設定すればいいのですか? – silkAdmin

+0

Charles Debugging Proxyをダウンロードしてチェックアウトしたい場合は、ログを投稿することができます。 ajax呼び出しにrand param(javascript timestamp)を追加すると、常に新しい応答を確実に得ることができます。 –

1

完全な目的を知らなくても、私は自家製のサーバー設定を公開しません。しかし、本当に必要な場合は、スクリプトタグプロキシを介して古い方法で行うことができます。 (<script src="http://external.host.com:...")。

URLアドレスrequest_idをスクリプトアドレスに追加し、そのスクリプトに要求IDをif(typeof($)==='object' && typeof($.trigger)==='function')$.trigger('requestCompleted',request_id);という形式で戻すことができます。

+0

つまり、ページ・ロード時にノード・サーバーとの接続をオープンするということですか?もし私が2番目の部分を持っていると思っていなければ、どうやってデータをこのように戻すのかを明確にしていますか?あなたはノードサーバーを公開しませんか?ノード内にアプリ全体を構築するのであれば、それを正しく公開する必要がありますか? – silkAdmin

+0

彼は 'localhost'によって誤って指示されています。あなたのクライアントがcURLを介してWebサーバのローカルにアクセスするPHPではなく、localhostを使ってアクセスしていると考えています。 – Jason

+0

@Jason OPはnodeserver.site.comまたはwww.site.com:3000を聞いているノードサーバーについて話し、www.site.comからのリクエストを受け取ります。私は何かを逃したとは思わない。 @silkAdminスクリプトsrcにURLパラメータを使用します。 'var data = JSON.stringify();'この 'data'変数を使ってNodeからブラウザにデータを送ります。これはwww.site.comのスクリプトからアクセスすることができます。それは他のスクリプトを実際に含むようなものです。 Googleのスクリプトタグプロキシです。 ノードを公開するという点では、ノードはApacheやメインWebサーバーではないため、ホストのファイアウォールが存在しない場合、セキュリティ上の問題が発生する可能性があります。 –

0

リバースプロキシをソートするように設定することができます。メインドメインにAJAX呼び出しを送ります(例:example.com/?proxy=live & restofrequest)。 nginxはそれをnode.jsサーバの適切なドメイン:ポートに書き直します。

+0

私はそれを試しましたが、私が(あなたの例を取り戻して)example.com/?proxy=live&restofrequestに私の要求をすると、私は302の一時的に移動したエラーを取得します。 – silkAdmin

+0

ええと...十分に公正で、私はnginxのURL書き換えでそれに慣れていることを知っています。 – Jason

+0

リバースプロキシ用にこれを試してください:http:// tumblr。intranation.com/post/766288369/using-nginx-reverse-proxy – Jason