के साथ express.js सत्र मैंने api.mydomain.com
को localhost:2000
पर आगे बढ़ाने के लिए अपाचे रिवर्स प्रॉक्सी सेट अप किया है जो ठीक काम करता है।रिवर्स प्रॉक्सी
हालांकि, मेरे पास वास्तविक समस्या सत्रों के संबंध में है - ऐसा लगता है कि 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';
});
अपाचे config
<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.configure()
में app.use(app.router)
....
app.use(function (req, res) {
res.send('<h2>Hello, your session id is ' + req.sessionID + '</h2>');
});
निम्नलिखित में परिणाम होगा (प्रत्येक पंक्ति ऐप्लिकेशन में एक नई प्राप्त/सत्र अनुरोध का प्रतिनिधित्व करता है - नोड या तो पुनः प्रारंभ नहीं हुआ)।
स्थानीय होस्ट: 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
को सुलझा लेने के रूप में है कि सब कुछ ठीक करने के लिए लगता है। तो मुझे लगता है कि अपाचे ने एक्सप्रेस के साथ डोमेन संचार को कैसे संभाला है, यह सिर्फ कुछ है!
विशेष रूप से, मैं यहाँ config का उपयोग कर nginx के साथ सटीक एक ही बात करने की कोशिश की - http://blog.argteam.com/coding/hardening-node-js-for-production-part-2 -using-nginx-to-escape-node-js-load/लेकिन एसएसएल के बिना और ऊपर जैसा ही मुद्दा उत्पन्न किया। एसएसएल सत्रों के लिए एक आवश्यकता है? – crawf
आपकी समस्या को दोहराने की कोशिश करते समय मुझे एक ही समस्या आई है - जब तक कि मैंने अपनी ब्राउज़र कुकीज़ साफ़ नहीं की। क्या आप सत्यापित कर सकते हैं कि आपकी कुकी साफ़ करने के बाद समस्या बनी रहती है? अनुरोध के लिए आप किस ब्राउज़र/HTTP क्लाइंट का उपयोग कर रहे हैं? क्रोम और फ़ायरफ़ॉक्स का उपयोग करते हुए – zzen
@zzen। जब भी ये चीजें होती हैं, तो मैंने अपने कैश को साफ़ करना सुनिश्चित कर लिया है, लेकिन मदद नहीं की प्रतीत होती है। विशेष रूप से, मुझे एक उप डोमेन (उदाहरण के लिए api.domain.com की बजाय domain.com/api) की बजाय निर्देशिका पर रनइन करते समय रिवर्स प्रॉक्सी मिल गया है, जो मुझे लगता है कि यह पूरी तरह से डोमेन हैंडलिंग के साथ एक मुद्दा है एक्सप्रेस .. – crawf