समाधान Virtualache निर्देश पर Apache 2.2 प्रलेखन पर है :
सिंटेक्स: ... (...) Addr हो सकता है:
- वर्चुअल होस्ट का आईपी पता;
- वर्चुअल होस्ट (अनुशंसित नहीं) के आईपी पते के लिए एक पूरी तरह से योग्य डोमेन नाम;
- चरित्र * , जो केवल NameVirtualHost के संयोजन में उपयोग किया जाता है * सभी आईपी पते से मेल खाने के लिए; या
- स्ट्रिंग _default_ , जो केवल बेजोड़ IP पतों को पकड़ने के लिए IP वर्चुअल होस्टिंग के साथ प्रयोग की जाती है ।
Virtualhosts को संभालने के दो तरीके मौजूद हैं, नाम आधारित virtualhosting और IP आधारित Virtualhosting।
नामित वर्चुअलहोस्ट के साथ आपके पास वर्चुअलहोस्ट की सूची है, प्रत्येक एक या कई डोमेन नामों का प्रबंधन करता है, और प्रत्येक जोड़े के साथ जुड़ा हुआ है listening IP:port
। *
एक विशेष मूल्य है जिसका मतलब है कि इस होस्ट के सभी आईपी । डिफ़ॉल्ट virtualHost इस सूची में से प्रत्येक को दिए गए श्रवण पते के लिए पहला घोषित किया गया है।
IP आधारित VirtualHosts के साथ VirtualHost के ServerName
निर्देश का उपयोग नहीं किया जाता है, महत्वपूर्ण जानकारी श्रवण आईपी (और पोर्ट) है, और डिफ़ॉल्ट VirtualHost आने वाले अनुरोध को संभालने वाले आईपी से मेल खाने वाला पहला है।
एक नाम आधारित virtualhosting विन्यास के साथ:
<Virtualhost *:80> with ServerName foo.com
इसका मतलब है "सभी होस्ट पर प्रबंधित आईपी", "पोर्ट 80 पर", "यदि अनुरोध होस्ट हेडर foo.com है" तो मैं "virtualhost का उपयोग करूँगा"
<Virtualhost *:*> with Servername foo.com
इसका मतलब है "सभी आईपी पर इस होस्ट पर प्रबंधित", "सभी बंदरगाहों पर", "अगर अनुरोध होस्ट हेडर foo.com है" तो मैं "virtualhost का उपयोग करूँगा"
<Virtualhost 10.0.0.2:*> with Servername foo.com
इसका अर्थ है "मेरे नेटवर्क इंटरफ़ेस से आने वाले अनुरोध के लिए 10.0.0.2", "सभी बंदरगाहों पर", "अगर अनुरोध होस्ट हेडर foo.com है" तो मैं इस virtualhost का उपयोग करूँगा
<Virtualhost _default_:*> with Servername foo.com
: नाम आधारित वर्चुअलहोस्टिंग के साथ उपयोग नहीं किया जाना चाहिए
और एक आईपी आधारित वर्चुअलहोस्टिंग पर:
<Virtualhost 10.0.0.2:*>
"मैं अपने 10.0.0.2 इंटरफ़ेस पर आने वाले अनुरोध के लिए इस वर्चुअलहोस्ट का उपयोग करूंगा"
<Virtualhost _default_:443>
"पोर्ट 443 पर आने के अनुरोध के लिए मैं अपने होस्ट पर अन्य सभी नेटवर्क इंटरफेस के लिए इस वर्चुअलहोस्ट का उपयोग करूंगा"
<Virtualhost _default_:*>
इसका अर्थ है "मैं अपने होस्ट पर अन्य सभी नेटवर्क इंटरफ़ेस के लिए इस वर्चुअलहोस्ट का उपयोग करूंगा, अगर यह पिछले नियम से मेल नहीं खाता है, और यदि अनुरोध होस्ट हेडर एक नाम आधारित वर्चुअलाइजहोस्ट द्वारा मेल नहीं खाता है"
तो यह सब एक पकड़-सभी Virtualhost को परिभाषित करने के बारे में है। प्रलेखन जोड़ता है:
IP- आधारित वर्चुअल होस्टिंग का उपयोग करते समय, विशेष नाम _default_
निर्दिष्ट किया जा सकता है जिस स्थिति में यह वर्चुअल होस्ट किसी भी IP पते से मेल खाएगा जो किसी अन्य वर्चुअल होस्ट में स्पष्ट रूप से सूचीबद्ध नहीं है। किसी भी _default_
वर्चुअल होस्ट की अनुपस्थिति में "मुख्य" सर्वर कॉन्फ़िगरेशन, जिसमें किसी भी वर्चुअलहॉस्ट सेक्शन के बाहर की सभी परिभाषाएं शामिल हैं, का उपयोग तब किया जाता है जब कोई आईपी-मैच नहीं होता है। (लेकिन ध्यान दें कि NameVirtualHost निर्देश से मेल खाने वाला कोई भी IP पता न तो "मुख्य" सर्वर कॉन्फ़िगरेशन और _default_
वर्चुअल होस्ट का उपयोग करेगा। आगे के विवरण के लिए नाम-आधारित वर्चुअल होस्टिंग दस्तावेज़ देखें।)
इसलिए सभी चीज़ों के बाद यह काफी "स्पष्ट" हो जाता है कि IP- आधारित और नाम-आधारित virtualhosting का मिश्रण एक गड़बड़ बन सकता है। अपाचे 2.2 के साथ नाम आधारित वर्चुअलीहोस्टिंग का उपयोग केवल तभी NameVirtualhost <something>
किया जाता था जब उसका उपयोग किया जाता था।
लेकिन नए अपाचे 2.4 संस्करण के साथ चीज़ों को समझना वास्तव में आसान है, कोई NameVirtualhost
घोषणा नहीं । NameVirtualHost के निर्देश का अब कोई प्रभाव नहीं है, एक चेतावनी का उत्सर्जन करने के अलावा। कई वर्चुअल होस्ट में प्रदर्शित होने वाले किसी भी पते / पोर्ट संयोजन को नाम-आधारित वर्चुअल होस्ट के रूप में माना जाता है । कोई और अधिक जटिल विचार नहीं है, यहां तक कि प्रलेखन अब सरल है:
- चरित्र *, जो वाइल्डकार्ड के रूप में कार्य करता है और किसी भी आईपी पते से मेल खाता है।
- स्ट्रिंग
_default_
, जो * के लिए एक उपनाम है
तो अपाचे 2.4 के साथ जवाब है, यह एक ही बात है ।