11

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);
4

5 に答える 5

5

応答を手動で見て、それがセット Cookie であるかどうかを確認し、JSESSSIONID を切り取り、それを変数に格納し、後続のすべての要求でヘッダーとして渡すことで、あなたが求めていることを行いました。このようにして、リバース プロキシは Cookie として機能します。

on('proxyReq', function(proxyReq){ proxyReq.setHeader('cookie', 'sessionid=' + cookieSnippedValue) 
于 2015-08-29T10:54:25.213 に答える
2

こんにちは @tomswift はローカル サーバーを http プロトコルで実行していますが、リモート サーバーから受信したセッション Cookie は次のように転送されますSecure;

'set-cookie':
[ 'JSESSIONID=COOKIEWITHSECURE98123; Path=/;HttpOnly;Secure;']

set-cookieその場合、ローカル サーバーがクライアントに応答する前に、元の応答 (リモート サーバーからローカル サーバーへの応答) ヘッダーから抽出し、 を削除しSecure;て残りをプロキシ応答 (ローカル サーバーからクライアントへの応答) ヘッダーに入れます。 :

'set-cookie':
[ 'JSESSIONID=COOKIEWITHSECURE98123; Path=/;HttpOnly;']

その後、クライアントはセッション Cookie を自動的に取得します。

それが役立つことを願っています。

于 2016-09-18T03:14:37.937 に答える
0

理想的には、プロキシの仕事はリクエストを宛先に転送することであり、Cookieなどの重要なヘッダーを削除するべきではありませんが、そうであれば、ここでそれらに対して問題を提出する必要があると思いますhttps://github.com/nodejitsu / node-http-proxy/issues

また、リクエストヘッダーにCookieが含まれることはないとおっしゃいましたが、クライアントがCookieを受信しなかった可能性はありますか?

于 2012-04-24T02:56:26.107 に答える
0

node-http-proxyをフォークして変更することでこれを実装する方法を見つけました。それは開発環境である私の現在の目的を果たします。あらゆる種類の真剣な検討のために、それはより合法的な解決策に具体化される必要があります。

詳細は、GitHubに提出した問題に記載されています:https ://github.com/nodejitsu/node-http-proxy/issues/236#issuecomment-5334457

特に私が完全に間違った方向に進んでいる場合は、このソリューションに関するいくつかの意見が欲しいです。

于 2012-04-25T22:02:31.683 に答える