私は、JavaScriptアプリケーションの開発に使用している単純なExpressベースのNode.js Webサーバーを使用しています。私は、アプリケーションが別のドメインとポート上で動作しているJettyサーバーに対して行う、proxy-API要求にnode-http-proxyを使うようにサーバーを設定します。このセットアップは、セッション管理に関する問題に遭遇するまで完璧に動作しています。node-http-proxy経由のクッキーベースのセッションを維持する
認証時に、アプリケーションサーバーは、サーバーセッションを表す認証トークンを含むCookieを返します。 JSアプリケーションをファイルシステム(file://)から実行すると、クライアントがクッキーを受け取ると、後続のすべてのAPIリクエストで送信されることがわかります。ノードサーバー上でJSアプリケーションを実行し、API呼び出しがnode-http-proxy(RoutingProxy)を介してプロキシされると、要求ヘッダーにはCookieが含まれません。
このタイプのセッション永続性をプロキシ経由でサポートするために手動で処理する必要があるものはありますか?私はnode-http-proxyコードを掘り下げてきましたが、Nodeが初めてのので少し頭がおかしくなります。
https://gist.github.com/2475547か:
var express = require('express'),
routingProxy = require('http-proxy').RoutingProxy(),
app = express.createServer();
var apiVersion = 1.0,
apiHost = my.host.com,
apiPort = 8080;
function apiProxy(pattern, host, port) {
return function(req, res, next) {
if (req.url.match(pattern)) {
routingProxy.proxyRequest(req, res, {host: host, port: port});
} else {
next();
}
}
}
app.configure(function() {
// API proxy middleware
app.use(apiProxy(new RegExp('\/' + apiVersion + '\/.*'), apiHost, apiPort));
// Static content middleware
app.use(express.methodOverride());
app.use(express.bodyParser());
app.use(express.static(__dirname));
app.use(express.errorHandler({
dumpExceptions: true,
showStack: true
}));
app.use(app.router);
});
app.listen(3000);
Web Inspectorで、クライアントが「set-cookie」ヘッダーを受け取っていることを確認しました。あなたはトランザクション[ここ](http://i.imgur.com/VQV0a.png)を見ることができます。この場合のリクエストCookieは、私がセッションをサポートするために使用しようとしていたExpressのcookieParserによって生成されていますが、それは常に独自のことをするようです。 – tomswift
GitHubで、プロキシされたサーバーの応答からCookieを取得し、セッションを手動でサポートするのに苦労しました。https://github.com/nodejitsu/node-http-proxy/issues/236 – tomswift