JavaScript アプリケーションの開発に使用している単純な Express ベースの Node.js Web サーバーがあります。node-http-proxy を使用して、アプリケーションが作成する API リクエストを別のドメインとポートで実行されている Jetty サーバーにプロキシするようにサーバーをセットアップしました。セッション管理で問題が発生し始めるまで、このセットアップは問題なく機能していました。
認証時に、アプリケーション サーバーは、サーバー セッションを表す認証トークンを含む Cookie を返します。ファイルシステム (file://) から JS アプリケーションを実行すると、クライアントが Cookie を受信すると、それが後続のすべての API 要求で送信されることがわかります。ノード サーバーで JS アプリを実行し、API 呼び出しが node-http-proxy (RoutingProxy) を介してプロキシされると、要求ヘッダーに Cookie が含まれません。
プロキシを介したこのタイプのセッション永続性をサポートするために手動で処理する必要があるものはありますか? 私は node-http-proxy コードを掘り下げてきましたが、Node.js を初めて使用するため、少し理解できません。
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);