2012-01-14 18 views
13

का उपयोग कर ग्राहक/क्लाइंट स्टाइल सबडोमेन कैसे करें ग्राहक किसी को डोमेन में अपने संगठन के नाम का उपयोग करके सास तक पहुंचने की अनुमति कैसे देता है?नोड और एक्सप्रेस

उदाहरण के लिए, एक वेब ऐप, example.com, में 2 ग्राहक, ओर्गा और ओर्बबी हो सकते हैं।

एक बार लॉग इन होने पर, प्रत्येक ग्राहक को उनकी साइट, orga.example.com/orgb.example.com पर रीडायरेक्ट किया जाता है।

एक बार अनुरोध जिसमें सबडोमेन नोड सर्वर तक पहुंच जाता है, मेरी आशा है कि अनुरोध को एक '/' मार्ग से संभाला जाए। मार्ग हैंडलर के अंदर, यह मेजबान शीर्षलेख का निरीक्षण करता है और संगठन के लिए उपमहाद्वीप के रूप में सबडोमेन का व्यवहार करता है। कुछ ऐसा:

app.get "/*", app.restricted, (req, res) -> 
    console.log "/* hit with #{req.url} from #{req.headers.host}" 
    domains = req.headers.host.split "." 
    if domains 
    org = domains[0] 
    console.log org 
    # TODO. do something with the org name (e.g. load specific org preferences) 
    res.render "app/index", { layout: "app/app" } 

एनबी। डोमेन सरणी में पहला आइटम संगठन का नाम है। मुझे लगता है कि होस्ट हेडर में कोई पोर्ट दिखाई नहीं देता है और, अभी के लिए, मैं गैर-संगठन उप डोमेन नामों (जैसे www, ब्लॉग इत्यादि) को संभालने के तरीके पर विचार नहीं कर रहा हूं।

इसलिए मेरे पास सवाल यह है कि अलग-अलग होस्ट हेडर के साथ अनुरोधों को संभालने के लिए नोड/एक्सप्रेस को कैसे कॉन्फ़िगर किया जा सकता है। यह आम तौर पर अपाचे में एक वाइल्डकार्ड उपनाम या आईआईएस में होस्ट हेडर का उपयोग करके हल किया जाता है।

एक अपाचे/रेल उदाहरण @http://37signals.com/svn/posts/1512-how-to-do-basecamp-style-subdomains-in-rails

कैसे एक ही नोड में प्राप्त किया जा सकता है?

+0

प्राप्त करने के लिए आप एक मिडलवेयर कि मेजबान हैडर पर लग रहा है, जो कुछ भी लिख सकता है डेटा हो जाता है इसे उस विशिष्ट मेजबान की आवश्यकता है और मार्ग/मिडलवेयर में उपयोग के लिए req ऑब्जेक्ट में जोड़ता है। –

+0

मुझे लगता है कि बिट वह है जो मुझे पहले से मिला है (हालांकि अभी तक मिडलवेयर में स्थानांतरित नहीं हुआ है)। मैं * .example.com को पकड़ने के लिए सर्वर सेट अप करने के तरीके पर अवरुद्ध/अस्पष्ट हूं। मैं सोच रहा हूं कि प्रॉक्सी की आवश्यकता हो सकती है (https://github.com/nodejitsu/node-http-proxy) लेकिन मुझे इसे समझने का प्रयास करने से पहले मुझे और जानना होगा। मुझे स्थानीय रूप से विकसित करने के लिए समाधान की आवश्यकता है (ओएसएक्स पर)। – mattgi

उत्तर

2

मुझे लगता है कि आईपी पते और आपके नोड सर्वर के बंदरगाह पर आने वाला कोई भी अनुरोध आपके नोड सर्वर द्वारा संभाला जाना चाहिए। यही कारण है कि आप apache में vhosts बनाते हैं, उदाहरण के लिए उपदेश प्राप्त अपाचे के अनुरोधों के बीच अंतर करने के लिए।

express-subdomains के लिए स्रोत कोड पर नज़र डालें यदि आप देखना चाहते हैं कि यह सबडोमेन को कैसे प्रबंधित करता है (the source केवल 41 लाइनें)।

1

मेरे पास एक समान स्थिति थी, हालांकि मेरे पास मुख्य साइट example.com था जहां उपयोगकर्ता अपनी साइट को लॉगिन और प्रबंधित कर सकता था, फिर OrgA.example.com एक सार्वजनिक सामना करने वाली साइट थी जिसे लॉग इन उपयोगकर्ता के आधार पर अपडेट किया जाएगा example.com पर कार्रवाई।

मैंने दो अलग-अलग ऐप्स बनाने और वर्चुअल होस्ट्स को एक 'एप्लिकेशन' से कनेक्ट करने के लिए वर्चुअल होस्ट सेट अप करने और '*' को दूसरे में सेट करने के लिए समाप्त किया। Here's an example इसे कैसे करें पर करें।

7

अगर आप न express.vhost उपयोग करना चाहते हैं, तो आप http-प्रॉक्सी का उपयोग कर सकते हैं एक और अधिक संगठित मार्ग/पोर्ट प्रणाली

var express = require('express') 
var app = express() 
var fs = require('fs') 

/* 
Because of the way nodejitsu deals with ports, you have to put 
your proxy first, otherwise the first created webserver with an 
accessible port will be picked as the default. 

As long as the port numbers here correspond with the listening 
servers below, you should be good to go. 
*/ 

var proxyopts = { 
    router: { 
    // dev 
    'one.localhost': '127.0.0.1:3000', 
    'two.localhost': '127.0.0.1:5000', 
    // production 
    'one.domain.in': '127.0.0.1:3000', 
    'two.domain.in': '127.0.0.1:4000', 

    } 
} 

var proxy = require('http-proxy') 
    .createServer(proxyopts) // out port 
    // port 4000 becomes the only 'entry point' for the other apps on different ports 
    .listen(4000); // in port 


var one = express() 
    .get('/', function(req, res) { 
    var hostport = req.headers.host 
    res.end(hostport) 
}) 
.listen(3000) 


var two = express() 
    .get('/', function(req, res) { 
    res.end('I AM APP FIVE THOUSAND') 
    }) 
    .listen(5000) 
संबंधित मुद्दे