क्या सर्वर केवल एक वेबसाइट रखते हैं?


80

जैसा कि मैं समझता हूं कि DNS उस डोमेन नाम को उस सर्वर के आईपी पते के साथ लिंक करता है, जिस वेबसाइट पर स्टोर किया गया है, क्या इसका मतलब है कि प्रत्येक सर्वर केवल एक वेबसाइट को पकड़ सकता है? यदि वे नहीं करते हैं, तो सर्वर के आईपी पते को कैसे पता चलेगा कि मुझे कौन सी वेबसाइट चाहिए अगर एक ही सर्वर पर कई हैं?


13
विकिपीडिया का साझा वेब होस्टिंग से अच्छा परिचय है । यदि आप अपने ब्राउज़र में http: // <IP_ADDR> / दर्ज करते हैं, तो HTTP अनुरोध में Host:हेडर के भीतर एक डोमेन नहीं होगा । साझा होस्टिंग के मामले में, वेब सर्वर को प्रदाता द्वारा इसे अलग-अलग तरीकों से संभालने के लिए कॉन्फ़िगर किया जा सकता है (जैसे कि एक डिफ़ॉल्ट, प्रदाता को पुनर्निर्देशित करना)।
जेडी

मैंने उन लिंक पर क्लिक किया है जो "इस सर्वर ने कभी भी उस वेबसाइट को होस्ट नहीं किया है, जिसे आप खोज रहे हैं" जैसे संदेशों के साथ तोड़ते हैं।
जेस्विन जोस

1
यदि आप एक ही सर्वर पर कई एप्लिकेशन चलाने के लिए एक रास्ता देख रहे हैं - तो आप क्रमशः पोर्ट 8001 और 8002 पर दो ऐप MyApp और YourApp हैं। आप myapp.com और yourapp.com: पर दो लोड बैलेंसर या एप्लिकेशन प्रॉक्सिजी कर सकते हैं। क्या उन्हें डिफ़ॉल्ट पोर्ट (80/443) पर अनुरोध प्राप्त होते हैं और इसे क्रमशः 8001 और 8002 पोर्ट पर वास्तविक सर्वर (ओं) को अग्रेषित करते हैं।
रोहिथप्र

6
बड़ा सवाल है। प्रत्येक वेबसाइट को अपने स्वयं के आईपी पते की आवश्यकता होती है (एक सर्वर में एक से अधिक आईपी पते हो सकते हैं)। HTTP / 1.1 में होस्ट हेडर को आपके द्वारा बताई गई सटीक समस्या के बारे में बताने के लिए पेश किया गया था। Www8.org/w8-papers/5c-protocols/key/key.html
AE

6
Http 1.1 मेजबान हैडर आपके पास नहीं था, IPv6 अब तक लागू किया जाएगा ;-) :-(
Lenne

जवाबों:


149

मूल रूप से: ब्राउज़र में HTTP अनुरोध में डोमेन नाम शामिल है, इसलिए वेबसर्वर जानता है कि किस डोमेन से अनुरोध किया गया था और वह उसी के अनुसार प्रतिक्रिया दे सकता है।


HTTP अनुरोध

यहां बताया गया है कि आपका विशिष्ट HTTP अनुरोध कैसे होता है:

  1. उपयोगकर्ता प्रपत्र में एक URL प्रदान करता है http://host:port/path

  2. ब्राउज़र URL के होस्ट (डोमेन) भाग को निकालता है और इसे आईपी पते में अनुवाद करता है, यदि आवश्यक हो, तो नाम रिज़ॉल्यूशन के रूप में जाना जाता है । यह अनुवाद DNS के माध्यम से हो सकता है, लेकिन इसके लिए (उदाहरण के लिए, hostsसामान्य OS पर स्थानीय फ़ाइल DNS को बायपास नहीं करता है)।

  3. ब्राउज़र उस आईपी पते पर निर्दिष्ट पोर्ट के लिए एक टीसीपी कनेक्शन या पोर्ट 80 पर डिफॉल्ट को खोलता है।

  4. ब्राउज़र एक HTTP अनुरोध भेजता है। HTTP / 1.1 के लिए, यह इस तरह दिखता है:

    GET /path HTTP/1.1
    Host: example.com
    

    ( Hostहेडर मानक और HTTP / 1.1 में आवश्यक है। यह HTTP / 1.0 कल्पना में निर्दिष्ट नहीं किया गया था, लेकिन कुछ सर्वर इसे वैसे भी समर्थन करते हैं।)

यहां से, वेबसर्वर के पास जानकारी के कई टुकड़े होते हैं जो यह तय करने के लिए उपयोग कर सकते हैं कि प्रतिक्रिया क्या होनी चाहिए। ध्यान दें कि एकल वेबसर्वर के लिए कई आईपी पतों से बंधना संभव है।

  • अनुरोधित आईपी पता, टीसीपी सॉकेट से
    • क्लाइंट का आईपी पता भी उपलब्ध है, लेकिन इसका उपयोग शायद ही कभी किया जाता है - कभी-कभी अवरुद्ध / फ़िल्टर करने के लिए
  • अनुरोधित पोर्ट, टीसीपी सॉकेट से
  • अनुरोधित होस्टनाम, जैसा Hostकि HTTP अनुरोध में ब्राउज़र द्वारा हेडर में निर्दिष्ट है ।
  • अनुरोधित मार्ग
  • कोई अन्य हेडर (कुकीज़, आदि)

जैसा कि आपने देखा है, इन दिनों सबसे आम साझा होस्टिंग सेटअप एक ही आईपी पते पर कई वेबसाइटों को डालता है: पोर्ट संयोजन, बस Hostवेबसाइटों के बीच अंतर करने के लिए छोड़ देता है ।

यह अपाचे-भूमि में एक नाम-आधारित वर्चुअल होस्ट के रूप में जाना जाता है , जबकि निग्नेक्स उन्हें सर्वर ब्लॉक में सर्वर नाम देता है और IIS वर्चुअल सर्वर को पसंद करता है ।


HTTPS के बारे में क्या?

HTTPS थोड़ा अलग है। टीसीपी कनेक्शन की स्थापना के लिए सब कुछ समान है, लेकिन इसके बाद एक एन्क्रिप्टेड टीएलएस सुरंग स्थापित की जानी चाहिए। लक्ष्य के बारे में किसी भी जानकारी को लीक नहीं करना है।

यह सत्यापित करने के लिए कि सर्वर वास्तव में इस डोमेन का मालिक है, सर्वर को एक विश्वसनीय तृतीय पक्ष द्वारा हस्ताक्षरित प्रमाणपत्र भेजना होगा। ब्राउज़र तब इस प्रमाणपत्र की उस डोमेन से तुलना करेगा जो उसने अनुरोध किया था।

यह एक समस्या प्रस्तुत करता है। सर्वर को कैसे पता चलता है कि होस्ट (वेबसाइट) के सर्टिफिकेट को भेजना है, अगर उसे HTTP रिक्वेस्ट मिलने से पहले ऐसा करने की जरूरत है?

परंपरागत रूप से, यह HTTPS की आवश्यकता वाली प्रत्येक वेबसाइट के लिए एक समर्पित IP पता (या पोर्ट) होने से हल किया गया था। जाहिर है, यह समस्याग्रस्त हो जाता है क्योंकि हम IPv4 पतों से बाहर निकलने लगते हैं।

एसएनआई (सर्वर नाम संकेत) दर्ज करें । ब्राउज़र अब TLS वार्ता के दौरान hostname पास करता है, इसलिए सर्वर के पास यह जानकारी पर्याप्त है कि वह सही प्रमाण पत्र भेज सके। सर्वर साइड पर, कॉन्फ़िगरेशन बहुत समान है कि HTTP वर्चुअल होस्ट कैसे कॉन्फ़िगर किया गया है।

नकारात्मक पक्ष यह है कि होस्टनाम अब एन्क्रिप्शन से पहले सादे पाठ के रूप में पारित किया गया है, और अनिवार्य रूप से लीक की गई जानकारी है। यह आमतौर पर एक स्वीकार्य ट्रेडऑफ़ माना जाता है, होस्टनाम पर विचार करना सामान्यतः DNS क्वेरी में वैसे भी उजागर होता है।


क्या होगा यदि आप केवल आईपी पते द्वारा साइट का अनुरोध करते हैं?

जब सर्वर यह नहीं जानता कि आपके द्वारा अनुरोधित विशिष्ट होस्ट सर्वर कार्यान्वयन और कॉन्फ़िगरेशन पर निर्भर करता है। आमतौर पर, एक "डिफ़ॉल्ट", "कैटचेल" या "फॉलबैक" साइट है जो निर्दिष्ट है कि सभी अनुरोधों पर प्रतिक्रिया प्रदान करेगा जो स्पष्ट रूप से एक मेजबान निर्दिष्ट नहीं करते हैं।

यह डिफ़ॉल्ट साइट अपनी स्वतंत्र साइट हो सकती है (अक्सर एक त्रुटि संदेश दिखाती है), या यह सर्वर पर अन्य साइटों में से कोई भी हो सकता है, जो कि सर्वर व्यवस्थापक की पसंद पर निर्भर करता है।


1
इसके अलावा, एक साइट को कई सर्वरों में विभाजित किया जा सकता है, जैसा कि लोड बैलेंसर्स के साथ होता है, जैसे हरोकू और अमेज़ॅन उपयोग करता है।
phyrfox

1
@phyrfox Yea, मैंने इसे जोड़ने के बारे में सोचा था, लेकिन यह केवल प्रश्न से संबंधित है और मैं उत्तर को बहुत लंबा नहीं करना चाहता था। बाद में इसके लिए एक अनुभाग जोड़ना अभी भी समाप्त हो सकता है।
बॉब

किंवदंती है कि उप-डोमेन एक नेटवर्क के अंदर इतने विशिष्ट कंप्यूटरों को इंगित करते हैं। सिद्धांत में
लूपैक्स

"परंपरागत रूप से, यह HTTPS की आवश्यकता वाली प्रत्येक वेबसाइट के लिए एक समर्पित IP पता (या पोर्ट) होने से हल किया गया था। जाहिर है, यह समस्याग्रस्त हो जाता है क्योंकि हम IPv4 पतों से बाहर निकलने लगते हैं।" ।
लेनन

92

गैर-तकनीकी लोगों के लिए मेरे पास यह स्पष्टीकरण है।

जैक, जिल और जो एक डॉरमिटरी में रहते हैं, और उनके पास सेलफोन नहीं है।

फोनबुक में, वे सभी एक ही नंबर के साथ सूचीबद्ध हैं। (एक रिकॉर्ड)

आप नंबर डायल करते हैं, और कोई व्यक्ति फोन उठाता है; आप कहते हैं, "मैं जिल से बात करना चाहूंगा", और आप उसे लाइन पर ले आते हैं।

फोनबुक में ए-रिकॉर्ड (ए फोननंबर / आईपी-एड्रेस) के बजाय, यह सिर्फ "डॉरमेटरी एक्स" कह सकता है, फिर आपको डॉरमेटरी एक्स के लिए संख्या के लिए आगे देखना होगा। यह एक CNAME रिकॉर्ड है।

यदि जिल उपलब्ध नहीं है, तो आप प्राप्त कर सकते हैं

  • 404 जिल यहां नहीं है
  • 410 जिल मृत है।
  • पीटर के साथ 301 जिल को स्थानांतरित किया गया
  • 302 जिल पीटर का दौरा कर रहा है, उसके बजाय उसे बुलाओ

  • 400 मैं तुम्हें समझ नहीं सकता।

  • 401 आप कौन हैं? पासवर्ड क्या है? या हम 10 बजे के बाद पुरुष कॉल करने की अनुमति नहीं देते हैं
  • 402 भुगतान आवश्यक है (क्या आपको यकीन है कि जिल उसका असली नाम है ;-))
  • 403 नहीं, यह सही पासवर्ड नहीं है।
  • 418 जिल एक चायदानी है :-)
  • 429 जिल कोई और कॉल नहीं ले सकता।
  • 451 आप अपने निरोधक आदेश का उल्लंघन कर रहे हैं।

  • 500 हमारा फोन सिस्टम टूट गया है।


जिज्ञासु के लिए 418 के पीछे आरएफसी है tools.ietf.org/html/rfc2324 और एक दिलचस्प लेख sitesdoneright.com/blog/2013/03/... :)
Wordzilla

6

जैसा कि मैं समझता हूं कि DNS उस डोमेन नाम को उस सर्वर के आईपी पते के साथ लिंक करता है, जिस वेबसाइट पर स्टोर किया गया है, क्या इसका मतलब है कि प्रत्येक सर्वर केवल एक वेबसाइट को पकड़ सकता है?

सबसे पहले, आपको यह समझने की आवश्यकता है कि यहां कई अलग-अलग अवधारणाएं हैं।

  • वेब साइट, वेब पेजों का एक समूह जो एक सुसंगत पूरे का निर्माण करता है।
  • IP पता, एक संख्यात्मक पता (IPv4 के लिए 32-बिट, IPv6 के लिए 128 बिट) इंटरनेट प्रोटोकॉल द्वारा यातायात के लिए स्रोत या गंतव्य के रूप में उपयोग किया जाता है।
  • सर्वर, एक मशीन जिसका काम ग्राहकों से अनुरोधों को पूरा करना है।
  • होस्टनाम, DNS में एक मशीन की पहचान करने के लिए इस्तेमाल किया जाने वाला नाम (जैसे "www.example.com" या "en.wikipedia.org")

इनमें से किसी भी चीज़ के बीच एक-से-एक संबंध नहीं है। एक सर्वर में कई आईपी पते हो सकते हैं; कई होस्टनाम एक आईपी पते पर इंगित कर सकते हैं; एक होस्ट नाम कई आईपी पते पर इंगित कर सकता है। एकाधिक वेबसाइट एक ही होस्टनाम के अंतर्गत हो सकती हैं। एक वेबसाइट को कई होस्टनामों में फैलाया जा सकता है।

यदि वे नहीं करते हैं, तो सर्वर के आईपी पते को कैसे पता चलेगा कि मुझे कौन सी वेबसाइट चाहिए अगर एक ही सर्वर पर कई हैं?

पुराने दिनों में (HTTP 1.0 और उससे पहले) प्रत्येक होस्टनाम जिसे सर्वर अलग तरीके से हैंडल करना चाहता था, उसका अपना आईपी पता होना चाहिए। यह बल्कि बेकार था।

HTTP 1.1 ने Host"हेडर को HTTP अनुरोध में एक अनिवार्य क्षेत्र के रूप में जोड़ा (IIRC कुछ विक्रेताओं ने पहले इसे एक एक्सटेंशन के रूप में समर्थन किया था)। इसने उस सर्वर को बताया, जिसके लिए होस्टनाम का अनुरोध किया गया था और इसलिए इसे अलग-अलग होस्टनाम के लिए अलग-अलग सामग्री की सेवा करने की अनुमति दी गई थी।" IP पता। क्लाइंट में HTTP 1.1 के लिए समर्थन अब सर्वव्यापी है।

दुर्भाग्य से, एसएसएल (बाद में टीएलएस) ने एक शिकन जोड़ा। एसएसएल / टीएलएस सत्र की स्थापना के लिए सर्वर को अनुरोधित होस्टनाम को कवर करने वाले क्लाइंट को एक प्रमाण पत्र प्रस्तुत करने की आवश्यकता होती है, लेकिन एसएसएल / टीएलएस सत्र स्थापित होने के बाद HTTP अनुरोध नहीं आता है।

SubjectAltNameक्षेत्र के उपयोग या क्षेत्र में वाइल्डकार्ड के उपयोग के माध्यम से एक से अधिक होस्टनामों को कवर करना संभव है CommonName। हालाँकि, इससे प्रशासनिक चुनौतियाँ होती हैं, खासकर यदि होस्टनाम में अलग-अलग स्वामित्व वाले डोमेन होते हैं।

इसलिए टीएलएस ने "सर्वर नेम इंडिकेशन" (एसएनआई) एक्सटेंशन की शुरुआत की। इस एक्सटेंशन के साथ, क्लाइंट TLS हैंडशेक प्रक्रिया के दौरान सर्वर को अनुरोधित होस्टनाम भेजता है। सर्वर तब उपयुक्त प्रमाणपत्र प्रस्तुत कर सकता है। दुर्भाग्य से, सभी प्रमुख एसएसएल / टीएलएस कार्यान्वयन के वर्तमान संस्करण एसएनआई का समर्थन करते हैं, पुराने संस्करणों के उपयोग से बाहर होने में लंबा समय लगा है।


आप यह बताना भूल गए कि टीसीपी कई पोर्ट्स पर सुन सकता है, प्रत्येक पर अलग-अलग सर्वर चल रहे हैं ...
Toby Speight

हाँ, पर आप DNS में portnumbers की जरूरत नहीं है, और आप joe.p.user पर जाने के लिए उम्मीद नहीं कर सकते our.fabulous.site:81 इसके अलावा, कुछ फायरवॉल अमानक portnumbers को निवर्तमान पहुँच ब्लॉक।
लेनन

3

कुछ जवाबों की तुलना में इसका उत्तर थोड़ा अधिक जटिल है। जब आप एक DNS लुकअप करते हैं, तो आपको एक IP पता ( AIPv4 के AAAAलिए IPv6 के लिए रिकॉर्ड ) प्राप्त करना होगा। आपको संचार करने के लिए टीसीपी / आईपी पर एक सॉकेट खोलने में सक्षम होना चाहिए या पूरी चीज विफल हो जाती है। वह पता किसी सर्वर का प्रतिनिधित्व कर सकता है या वह लोड बैलेंसर का प्रतिनिधित्व कर सकता है। यह एक प्रॉक्सी का प्रतिनिधित्व भी कर सकता है। यदि होस्ट CloudFlare के पीछे है, उदाहरण के लिए, आपको जो पता मिलता है वह CloudFlare सर्वर का है। असली सर्वर कहीं और है। यह मेजबान को डेनियल-ऑफ-सर्विस हमलों जैसी समस्याओं से बचने की सुविधा देता है।

वर्चुअल होस्टिंग वह है जिसके बारे में आप पूछ रहे हैं (इस पर छपे कुछ अन्य प्रश्न, लेकिन किसी भी विवरण में नहीं)। वर्चुअल होस्टिंग वेब रिक्वेस्ट लेता है और होस्ट वेबसाइट (यानी domain.com) को देखता है कि कौन सी वेबसाइट पर काम करना है। तो अपाचे HTTP वेब सर्वर में आपके पास इस तरह का कॉन्फ़िगरेशन होगा

<VirtualHost *:80>
    ServerName www.domain.com
    ServerAlias domain.com

    DocumentRoot /var/www/domain.com
</virtualHost>

यह उदाहरण के लिए सरलीकृत है। इसलिए हम अपाचे को किसी भी आईपी के पोर्ट 80 पर सुनने के लिए कह रहे हैं (आधुनिक वर्चुअल मशीन में आपकी मशीन के आईपी की मेजबानी करने से इसका लाइव आईपी अलग हो सकता है)। फिर हम यह बताते हैं कि यह domain.comवेबसाइट है और वह कौन सी डायरेक्टरी है जिसके तहत वेबसाइट रहती है। फिर हम अपाचे को विभिन्न वेबसाइटों को संभालने के लिए इस ब्लॉक को बार-बार बता सकते हैं। प्रत्येक वेब सर्वर इस प्रकार की प्रणाली का समर्थन करता है।

इसे संभालने का एक और तरीका यह होगा कि वेब सर्वर को एक ही प्रोग्रामिंग स्क्रिप्ट (यानी PHP, ASP.NET, आदि) के लिए सभी वेब ट्रैफ़िक को निर्देशित करने के लिए कहा जाए और फिर वह एकल स्क्रिप्ट यह निर्धारित करेगी कि किस वेबसाइट और पेज को प्रदर्शित किया जाए।


1

DNS का उपयोग करके आप एक व्यक्तिगत आईपी पते पर कई नाम निर्दिष्ट कर सकते हैं जैसा आप चाहते हैं (अपनी मेजबानों की फ़ाइल में आप प्रत्येक नाम को रिक्त स्थान के साथ अलग कर सकते हैं, उदाहरण के लिए)। एक DNS सर्वर का उपयोग करके आप एक ही नाम के कई आईपी पते निर्दिष्ट कर सकते हैं । यह एक-से-एक रिश्ते तक सीमित नहीं है।

एक वेब सर्वर को पता है कि अनुरोधित URL की जांच करके किस साइट को सेवा देना है । यह देखता है कि किस डोमेन से अनुरोध किया गया था, जिस बंदरगाह का अनुरोध किया गया था और क्या प्रोटोकॉल का उपयोग किया गया था। इसका DNS से ​​कोई लेना-देना नहीं है और इसे HTTP प्रोटोकॉल द्वारा नियंत्रित किया जाता है।


0

वेब सर्वर में होस्ट कंटेनर की अवधारणा है ( यहां उदाहरण के लिए टॉमकैट के लिए प्रलेखन है)। एकाधिक डोमेन को एक ही बॉक्स / आईपी पते के लिए कॉन्फ़िगर किया जा सकता है, जिसमें कई डोमेन होते हैं। कंटेनरों में स्वतंत्र वर्किंग डाइरेक्टरीज़, ऑथेंटिकेशन रिम्स, लॉग डायरेक्टरीज़ और जैसी चीज़ें हैं।

सर्वर नए अनुरोध के लिए प्रासंगिक कंटेनर ढूंढता है डोमेन का नाम खरीदना इस HTTP अनुरोध का हिस्सा है।

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

अंत में, भले ही एक वेबसाइट के लिए कड़ाई से अद्वितीय आईपी पता आवश्यक हो, एक सर्वर बॉक्स में अक्सर कई नेटवर्क एडेप्टर होते हैं ताकि कई आईपी पते का उपयोग करने के लिए कॉन्फ़िगर किया गया हो।


0

आपका सर्वर IP पता एक ही समय में कई अलग-अलग डोमेन नाम रख सकता है।

जब आप वेबसाइट का उपयोग करते हैं तो आपका ब्राउज़र उसमें डोमेन नाम के साथ HTTP अनुरोध भेजता है, और सर्वर यह पता लगा सकता है कि उसे किस वेबसाइट का डेटा आपको वापस भेजना चाहिए।

इसे वर्चुअल होस्ट कहा जाता है, जो इतना सरल है :)

DNS और वर्चुअल होस्ट के बारे में अधिक जानकारी के लिए यहां एक नज़र डालें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.