5

There is a feature in a tool called charles that allows you to map remote requests:

http://www.charlesproxy.com/documentation/tools/map-remote/

Basically, it can take any request to a server(even if you're not the one running it) and then makes a new request to another server, preserving the path and the query string. The response from the second server then overwrites the response from the first server.

I just want to know if there is a node module that can do this. I tried using http-proxy, but I have a feeling this map remote tool is a bit different than a proxy, since it seems like you must own both servers with a proxy.

EDIT: Tried using the http-proxy node module again, but can't seem to get it to work. Here's my code:

var http = require('http')
, httpProxy = require('http-proxy');

httpProxy.createServer({
    hostnameOnly: true,
    router: {
        'www.stackoverflow.com': 'localhost:9000',
    }
}).listen(80);

// Create your target server
//
http.createServer(function (req, res) {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.write('request successfully proxied!' + '\n' + JSON.stringify(req.headers, true, 2));
  res.end();
}).listen(9000);

My expectation is that when I go to www.stackoverflow.com or www.stackoverflow.com:80, it will instead redirect to my localhost:9000

4

4 に答える 4

4

いいえ、あなたが求めているのは確かに単純なプロキシです。いいえ、プロキシを実行するために両方のサーバーを「所有」する必要はありません。リクエストをプロキシするだけで、その時点で必要に応じてデータを変更できます。

あなたが言及したプロキシモジュールは正常に動作し、他にもたくさんあります。必要に応じて、単純な Nginx 構成でこれを行うこともできます。

于 2014-01-26T05:08:47.607 に答える
3

私は自分のソリューションでこのペーストビンを作成しました: http://pastebin.com/TfG67j1x

ペーストビンの内容を proxy.js として保存します。依存関係は、proxy.js ファイルと同じフォルダーにインストールしてください。(npm install http-proxy colors connect util --save)

プロキシを実行すると、次のようになります。

  • 8013 でリッスンする新しいサーバーを開始し、プロキシ サーバーとして機能します。
  • 9013 でリッスンするデモ ターゲット サーバーを起動します。

プロキシ経由でデモ ターゲットにアクセスすると、簡単にテストできるように、"Ruby" 文字列が "nodejitsu" に変更されます。企業のファイアウォール/プロキシの背後にいる場合、このスクリプトは今のところ失敗します。

更新:「ヘッダーは既に送信されました」の問題は、32/33 行目にありました。同じ接続で複数のエラーが発生したことが判明しました。最初のエラーが発生すると、ヘッダーが送信されます。2 番目のエラーが発生すると、ヘッダーは既に送信されています。その結果、「headers already sent」例外が発生し、サーバーが強制終了されます。

この修正により、サーバーが停止することはなくなりましたが、NODE.JS がターゲット サイトに到達できないというエラーの原因は修正されません。別のプロキシ/ファイアウォールの背後にいる必要があり、NodeJS は HTTP 要求を 2 番目のプロキシに転送する必要があります。通常、ブラウザでプロキシを使用してインターネットに接続すると、私のソリューションは失敗します。ただし、これを要件として指定しませんでした。

私のプロキシを介してネットワーク内のサーバーにアクセスすることで、これを確認できます (通常、プロキシは必要ありません)。

UPDATE2 : 直接アクセスhttp://localhost:8013するのではなく、ブラウザでプロキシとして設定する必要があります。元のブラウザのプロキシ設定に注意してください (上記を参照)。アクセスしてみてくださいhttp://localhost:9013

于 2014-02-02T10:05:44.807 に答える
1

www.stackoverflow.com が node.app で終わっていることを確認できますか? 名前は現在、この Web サイトにつながる IP アドレスに解決されるため、名前が node.app に解決されるようになっていることを確認する必要があります。この場合、それはおそらく hosts ファイルを編集することを意味します。

于 2014-01-31T10:40:47.937 に答える
1

そのプロキシをブラウザの設定に追加しましたか? そうしないと、基になる OS がリクエストを直接ルーティングしwww.stackoverflow.com、プロキシがそれをキャッチする方法がありません。

于 2014-01-31T09:21:40.013 に答える