cra*_*awf 5 apache session proxy node.js express
我已经设置了一个Apache反向代理转发api.mydomain.com到localhost:2000哪个工作正常.
然而,我遇到的真正问题是关于会话 - 似乎在查询时没有存储req.session api.mydomain.com.会议将很好地访问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';
});
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
编辑
值得注意的是,进一步测试 - app.use(app.router)在app.configure()... 之前添加以下代码
app.use(function (req, res) {
res.send('<h2>Hello, your session id is ' + req.sessionID + '</h2>');
});
Run Code Online (Sandbox Code Playgroud)
将导致以下结果(每行代表对应用程序的新GET /会话请求 - 节点尚未重新启动).
本地主机:2000
Hello, your session id is sHkkESxJgzOyDhDwyTjwpNzq
Hello, your session id is sHkkESxJgzOyDhDwyTjwpNzq
Hello, your session id is sHkkESxJgzOyDhDwyTjwpNzq
Run Code Online (Sandbox Code Playgroud)
api.mydomain.com
Hello, your session id is uuo4U5ierZAG8LSH1BdwTlVf
Hello, your session id is 8BxL97Bo35SDt4uliuPgnbia
Hello, your session id is 0xkqZZpzQNvTsQpbJtUlXgkR
Run Code Online (Sandbox Code Playgroud)
设置信息
NodeJS v0.8.8
Apache v2.4.2
ExpressJS v3.0.0rc4
更新2
好吧,到目前为止我已经决定简单使用mydomain.com/api,因为这似乎可以解决所有问题.所以我想这与Apache如何处理与Express的域通信有关!
从Apache ProxyPass 和 Sessions来看,这个 apache 配置也许......
<VirtualHost *:80>
ServerName api.mydomain.com
ProxyPass / http://localhost:2000/
ProxyPassReverse / http://localhost:2000/
ProxyPassReverseCookiePath / /
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)