我已經設置了一個Apache反向代理轉發api.mydomain.com
到localhost:2000
,它工作得很好。express.js會話與反向代理
但是,我遇到的真正問題是關於會話 - 看起來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';
});
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 /會話請求應用程序 - 節點沒有任何重新啓動)。
本地主機: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
更新2
嗯,我到目前爲止已經解決,簡單的使用mydomain.com/api
,因爲這似乎解決了一切。所以我想這只是與Apache如何使用Express處理域名通信有關。
值得注意的是,在這裏我使用config試圖與nginx的同樣的事情 - http://blog.argteam.com/coding/hardening-node-js-for-production-part-2 -using-nginx-to-avoid-node-js-load /但沒有ssl併產生與上面相同的問題。 SSL是會話的一項要求嗎? – crawf
我在嘗試複製您的問題時遇到過類似問題 - 直到我清除瀏覽器Cookie。您可以在清除Cookie後確認問題仍然存在嗎?你使用什麼瀏覽器/ HTTP客戶端進行請求? – zzen
@zzen,使用Chrome和Firefox。當這些事情發生時,我一定要清除緩存,但似乎沒有幫助。值得注意的是,當反向代理運行在目錄而不是子域(例如domain.com/api而不是api.domain.com)上時,它使我認爲這完全是域處理問題express .. – crawf