api.mydomain.com
をlocalhost:2000
に転送するためにApacheリバースプロキシを設定しましたが、うまく動作します。express.jsリバースプロキシセッション
しかし、実際の問題はセッションに関することです。api.mydomain.com
でクエリを実行すると、req.sessionが保存されていないようです。セッションはlocalhost:2000
からの訪問でうまくいきます。
私は、これはプロキシドメインとは何かを持っていると仮定し...
server.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>
EDIT
注目すべきは、さらなるテストのために - 前に以下のコードを追加するapp.use(app.router)
app.configure()
で....
app.use(function (req, res) {
res.send('<h2>Hello, your session id is ' + req.sessionID + '</h2>');
});
は、以下になります(各ラインのアプリケーションへの新しいGET /セッション要求 - を表すノードは、いずれかの再起動していません)。
はlocalhost: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
のApache v2.4.2
それがすべてを解決するようで、同様ExpressJS v3.0.0rc4
UPDATE 2
は、私がこれまでのところ、簡単な使用mydomain.com/api
に解決しました。ですから、それはApacheがExpressとのドメイン通信をどのように処理するかとだけ関係していると思います!
注目すべきは、私はここで設定を使用してnginxのとまったく同じことを試してみました - http://blog.argteam.com/coding/hardening-node-js-for-production-part-2 -using-nginx-to-avoid-node-js-load /しかし、sslはなく、上記と同じ問題が発生しました。 SSLはセッションの要件ですか? – crawf
私はブラウザクッキーをクリアするまで、問題を再現しようとしている間に同様の問題が発生しました。あなたはクッキーをクリアした後も問題が解決しないことを確認できますか?リクエストにどのブラウザ/ HTTPクライアントを使用していますか? ChromeとFirefoxを使用して@zzen – zzen
私はこれらのことが起こるたびにキャッシュをクリアするようにしましたが、助けにはならなかったようです。注目すべきは、サブドメイン(例えば、api.domain.comではなくdomain.com/api)ではなく、ディレクトリ上で動くときにリバースプロキシが動作することです。 express ... – crawf