6

api.mydomain.com正常に動作する転送先の Apache リバース プロキシをセットアップしましたlocalhost:2000

しかし、私が抱えている本当の問題は、セッションに関するものですapi.mydomain.com。セッションは からアクセスしても問題なく動作しlocalhost:2000ます。

これは、プロキシされたドメインと関係があると思います...

サーバー.js

var express = require('express'),
    app = express();

app.enable('trust proxy');

app.configure(function() {
    app.use(express.bodyParser());
    app.use(express.methodOverride());
    app.use(express.cookieParser());
    app.use(express.session({ secret: 'supersecret'});
    app.use(app.router);
});

app.get('/session', function(req, res, next){ 
    console.log(req.session.username)
    // this will be undefined when called from  api.mydomain.com...
});


app.post('/session', function(req, res, next){ 
    req.session.username = 'my username';
});

Apache構成

<VirtualHost *:80>
    ServerName api.mydomain.com   
    ProxyPass / http://localhost:2000/
    ProxyPassReverse / http://localhost:2000/

    ProxyPreserveHost On
    ProxyPassReverseCookieDomain api.domain.com localhost:2000
    ProxyPassReverseCookiePath / /
</VirtualHost>

編集

特に、さらなるテストのために - 以下のコードを....の前app.use(app.router)に追加します。app.configure()

app.use(function (req, res) {
    res.send('<h2>Hello, your session id is ' + req.sessionID + '</h2>');
});

次のようになります (各行は、アプリへの新しい GET /session 要求を表します - ノードも再起動されていません)。

ローカルホスト:2000

Hello, your session id is sHkkESxJgzOyDhDwyTjwpNzq
Hello, your session id is sHkkESxJgzOyDhDwyTjwpNzq
Hello, your session id is sHkkESxJgzOyDhDwyTjwpNzq

api.mydomain.com

Hello, your session id is uuo4U5ierZAG8LSH1BdwTlVf
Hello, your session id is 8BxL97Bo35SDt4uliuPgnbia
Hello, your session id is 0xkqZZpzQNvTsQpbJtUlXgkR

設定情報

NodeJS v0.8.8

アパッチ v2.4.2

ExpressJS v3.0.0rc4

更新 2

さて、これまでのところmydomain.com/api、すべてを修正しているように見えるので、単純な使用に解決しました。つまり、Apache が Express とのドメイン通信を処理する方法に関係していると思います。

4

6 に答える 6

4

以下をserver.jsに追加します

app.enable('trust proxy');

ExpressJS API ドキュメントからの引用: http://expressjs.com/api.html#app-settings ...

trust proxy - リバース プロキシのサポートを有効にします。デフォルトでは無効になっています

于 2012-09-06T12:47:08.300 に答える
1

この構成を使用すると、ノード0.6.17、エクスプレス3.0.0rc4でセッションIDが維持されます。当初、仮想ホストには次のものがありましたが、構成に一致するように変更した後でも、引き続き機能します。

ServerName api
ServerAlias api.internal.local

維持されているSet-cookieconnect.sidを取得します。

于 2012-09-15T07:44:34.903 に答える
1

転送されているセッション Cookie を見て、プロキシ時にブラウザーが再送信しない理由を確認するのは簡単です。ドメインまたはパスが間違っている可能性があります。

Re: あなたのその後のコメント -- 引数としてドメインを使用する代わりに、本当に "ProxyPassReverseCookieDomain / /" を設定したのでしょうか?

ProxyPreserveHost もおそらく間接的に機能しますが、Cookie を修正する方が適切です。

于 2012-09-10T12:27:09.930 に答える
-1

これは私たちに起こったことであり、リバース Cookie が私たちの状況を改善するのに何の役にも立たなかったと思います。

私が試した: app.use("trust proxy");

無駄に。

ただし、

app.use("trust proxy");
app.set("trust proxy", 1);

動作します。

これがプロキシ Cookie の問題を抱えている人の助けになることを願っています。

于 2014-12-10T11:07:40.097 に答える