सवाल अपाचे डिफ़ॉल्ट / कैच-सभी वर्चुअल होस्ट?


यदि मेरे पास 3 डोमेन, domain1.com, domain2.com, और domain3.com हैं, तो क्या सूचीबद्ध डोमेन में डिफ़ॉल्ट वर्चुअल होस्ट सेट करना संभव है? उदाहरण के लिए, अगर मेरे पास होगा:

<VirtualHost 192.168.1.2 204.255.176.199>
DocumentRoot /www/docs/domain1
ServerName domain1
ServerAlias host
</VirtualHost>

<VirtualHost 192.168.1.2 204.255.176.199>
DocumentRoot /www/docs/domain2
ServerName domain2
ServerAlias host
</VirtualHost>

<VirtualHost 192.168.1.2 204.255.176.199>
DocumentRoot /www/docs/everythingelse
ServerName *
ServerAlias host
</VirtualHost>

यदि आप एक डोमेन पंजीकृत करते हैं और इसे मेरे सर्वर पर इंगित करते हैं, तो यह डोमेन 3 के समान दिखने के लिए डिफ़ॉल्ट रूप से डिफ़ॉल्ट होगा। क्या यह संभव है?


65
2017-11-06 18:36


मूल




जवाब:


हां, यह काम करना चाहिए, सर्वरअलीस को "*" होना चाहिए, सर्वरनाम के साथ एक वास्तविक होस्टनाम पर सेट होना चाहिए। आपको यह सुनिश्चित करने की आवश्यकता हो सकती है कि वर्चुअलहोस्ट आखिरी लोड हो गया है ...


44
2017-11-06 18:40



यह काम करना चाहिए, लेकिन नहीं। यदि कोई डोमेन विशेष रूप से सूचीबद्ध नहीं है, तो मुझे "फ़ायरफ़ॉक्स सर्वर नहीं मिल सकता है।" - SJaguar13
क्या आपने इसे "सर्वरनाम होस्ट" और "सर्वरअलीस *" के रूप में सेट किया था? मैंने मूल रूप से इस पर जोर नहीं दिया, लेकिन सर्वरनाम वाइल्डकार्ड नहीं लेता है, केवल सर्वरअलीस करता है। सर्वरनाम को एक वास्तविक होस्टनाम होना चाहिए। - freiheit
साथ ही, अन्य वर्चुअलहोस्ट काम करते हैं? अपाचे का क्या संस्करण? - freiheit
"फ़ायरफ़ॉक्स सर्वर नहीं ढूंढ सकता है।" एक अपाचे समस्या नहीं है। आपको अधिक जानकारी चाहिए (यदि कोई सर्वर से संपर्क किया गया है, तो त्रुटि कोड क्या है ...) - Law29


नाम-आधारित वर्चुअल होस्ट का उपयोग करते समय, पहला वर्चुअल होस्ट लोड किया गया कॉन्फ़िगरेशन डिफ़ॉल्ट होगा (स्रोत: अपाचे विकी)। उदाहरण के लिए, नीचे कॉन्फ़िगरेशन के साथ, अन्यथा बेजोड़ डोमेन के साथ मिलेंगे domain-one.com:

NameVirtualHost *:80

<VirtualHost *:80>
  ServerName domain-one.com
  # Other options and directives ..
</VirtualHost>

<VirtualHost *:80>
  ServerName domain-two.com
  # Other options and directives ..
</VirtualHost>

कई सर्वरों में एक मोनोलिथिक कॉन्फ़िगरेशन फ़ाइल नहीं है, लेकिन है निम्नानुसार होस्ट की गई कई होस्ट-विशिष्ट कॉन्फ़िगरेशन फ़ाइलें:

/etc/apache2
|-- sites_available  (actual configuration files)
`-- sites_enabled    (symlinks to files in sites_available)

इस मामले में, एक विशेष वर्चुअल होस्ट कॉन्फ़िगरेशन लोड करने के लिए सबसे पहले, सिम्लिंक का नाम किसी चीज़ पर बदलें जो पहली बार होगा क्रमबद्ध, जैसे कि 00-default


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

इसके अलावा, जबकि ServerAlias * वास्तव में कुछ भी मिल जाएगा, यह हो सकता है बाद में परिभाषित अन्य आभासी मेजबान ओवरराइड भी। शायद यह दृष्टिकोण अगर यह हमेशा होता है तो काम करेगा अंतिम वर्चुअल होस्ट को परिभाषित किया जाना चाहिए (जैसा कि प्रश्न में दिए गए विन्यास), लेकिन इसका मतलब है कि एक नया जोड़ना आदेश तथा बस बदलने के बजाय सॉर्ट ऑर्डर बदलना ऊपर के रूप में आदेश।


76
2018-03-26 23:06



सर के लिए + 1 मिलियन इंटर्नशिप सर! इसे डिफ़ॉल्ट होने वाला पहला होना चाहिए। - Ryan
क्या आप जानते हैं कि कौन सा पहले आता है, httpd.conf या conf.d / xyz.conf? - Esa Varemo
+ 2 मिलियन internets, धन्यवाद सर। - Ben Everard
"लोड किया गया पहला वर्चुअल होस्ट कॉन्फ़िगरेशन डिफ़ॉल्ट होगा" XAMPP (Windows) पर स्थानीय SSL डोमेन के साथ मेरी समस्या हल हो गई। ऐसा लगता है कि अपाचे प्रत्येक पोर्ट के लिए डिफ़ॉल्ट के रूप में पहले vhost का उपयोग करता है, इसलिए असुरक्षित / सुरक्षित अनुरोधों के लिए गैर-मिलान वाले डोमेन को सही ढंग से प्रबंधित करने के लिए, 80/443 पोर्ट्स के लिए परिभाषित 2 स्पष्ट "डिफ़ॉल्ट" कॉन्फ़िगरेशन होना चाहिए httpd-vhosts.conf - Wirone
@EsaVaremo - httpd.conf पहले लोड किया जाएगा, और इसमें एक लाइन शामिल होगी जो conf.d / xyz.conf (या संभवतः conf.d / *) स्रोतों को शामिल करती है। शामिल लाइन से पहले किसी भी कॉन्फ़िगरेशन (vhosts सहित) पहले संसाधित किया जाएगा; शामिल फ़ाइलों के बाद शामिल लाइन के बाद कुछ भी संसाधित किया जाता है। - Dan Pritts


एक servername निर्दिष्ट न करें, और यह आपका डिफ़ॉल्ट vhost बन जाता है ..

<VirtualHost *:80>
ServerAdmin webmaster@localhost

DocumentRoot /var/www
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
<Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>
</VirtualHost> 

यह भी सुनिश्चित करें कि आपने मुख्य httpd.conf फ़ाइल में दस्तावेज़ रूट निर्दिष्ट नहीं किया है, क्योंकि यह vhosts पर प्राथमिकता लेगा।


7
2017-11-07 00:32



मेरे पास पहले वर्चुअल होस्ट सूचीबद्ध हैं, और मुझे अभी भी "फ़ायरफ़ॉक्स सर्वर नहीं मिल रहा है।" - SJaguar13
मैं असहमत हूं। मेरे पास सर्वरनाम के बिना मेरा पहला वर्चुअल होस्ट सेट था, हालांकि, यह कुछ वर्चुअल होस्ट्स के साथ संघर्ष करता है, लेकिन दूसरों को नहीं। मैंने सर्वर नाम जोड़कर इस मुद्दे को हल किया, लेकिन इसे कुछ यादृच्छिक डोमेन पर सेट किया जो मेरे सर्वर पर नहीं है। चूंकि यह पहला वर्चुअल होस्ट है, इसे डिफ़ॉल्ट के रूप में उपयोग किया जाता है, लेकिन केवल तब मेल खाता है जब कोई डोमेन किसी अन्य सर्वरनाम से मेल नहीं खाता है। - joshaidan


आदेश महत्वपूर्ण है - सूची के शीर्ष पर अन्य सभी चीज़ों के लिए अपनी vhost परिभाषा को स्थानांतरित करें।


3
2017-11-07 01:07





_Default_ वर्चुअल होस्ट का उपयोग करें और इसे पहले httpd-vhosts.conf में निर्दिष्ट करें जैसा कि निर्दिष्ट है http://httpd.apache.org/docs/2.2/vhosts/examples.html

"किसी भी अनिर्दिष्ट आईपी पते और बंदरगाह के लिए प्रत्येक अनुरोध को पकड़ना, यानी, कोई पता / पोर्ट संयोजन जिसका उपयोग किसी अन्य वर्चुअल होस्ट के लिए नहीं किया जाता है [...] एक डिफ़ॉल्ट vhost कभी भी उस पते / पोर्ट पर भेजे गए अनुरोध को नहीं देता है नाम-आधारित vhosts के लिए उपयोग किया जाता है। अगर अनुरोध में अज्ञात या कोई मेजबान नहीं है: हेडर इसे प्राथमिक नाम-आधारित vhost (उस पते के लिए vhost / कॉन्फ़िगरेशन फ़ाइल में पहले दिखाई देने वाले पोर्ट के लिए vhost) से हमेशा सेवारत किया जाता है। "

एक लाइव लेकिन obfuscated httpd-vhosts.conf से स्निपेट जो सभी vhosts को पोर्ट 80 पर लॉक करने के लिए होता है:

# Listen for virtual host requests on all IP addresses.
# This directive cannot be removed:
NameVirtualHost *:80

<VirtualHost _default_:80>
# This vhost catches client requests with host headers which have
# not been matched by ServerName or ServerAlias directives in other vhosts.
#
# We redirect all such requests to a particular named vhost:
    RewriteCond %{HTTP_HOST}    ^(.*)$
    RewriteRule ^(.*)$  http://my.site.of.choice [R=permanent,L]
</VirtualHost>

# Name based vhosts here:
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName  my.other.site
    ServerAlias my.other.site2 my.other.site3
</VirtualHost>

# more vhosts etc...

Vhost मिलान प्रक्रिया की गहराई से स्पष्टीकरण यहां पाया जा सकता है: http://httpd.apache.org/docs/2.2/vhosts/details.html


2
2017-11-13 16:03



_default_ केवल गैर मिलान के लिए प्रयोग किया जाता है आईपी, इसलिए जब आपके पास वाइल्डकार्ड vhost (*: 80) है तो इसका कभी भी उपयोग नहीं किया जाएगा। - Wirone


वाइल्डकार्ड में आपकी साइट कॉन्फ़िगरेशन फ़ाइलें शामिल हैं:

Include path/to/site/confs/*httpd.conf

अपनी साइट conf फ़ाइलों को व्यवस्थित करें ताकि वे अपेक्षित क्रम में लोड हो जाएं। उदाहरण...

01-httpd.conf

02-site1-httpd.conf

03-site2-httpd.conf

आदि...

अपाचे इन क्रम में पढ़ेगा। फिर वह एक बनाएं जो किसी भी बेजोड़ वर्चुअल होस्ट को पकड़ने के लिए हमेशा लोड करेगा और डिफ़ॉल्ट साइट लोड करने के बजाय 404 लौटाएगा।

99-मोहक-httpd.conf

<VirtualHost *:8080>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

<VirtualHost *:8443>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

अपने httpd सुनवाई के बंदरगाहों के साथ बंदरगाहों को प्रतिस्थापित करना सुनिश्चित करें। या यदि आपके पास विशिष्ट इंटरफ़ेस पर httpd सुनना है, तो आपको इसके बजाय प्रत्येक इंटरफ़ेस के लिए एक कैचॉल जोड़ना होगा, जैसे:

<VirtualHost 192.168.1.101:8080>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>
<VirtualHost 192.168.1.101:8443>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

<VirtualHost 192.168.1.102:8080>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

<VirtualHost 192.168.1.102:8443>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

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


2
2018-05-25 16:50





सबसे अच्छा समाधान साइट कॉन्फ़िगरेशन फ़ाइल का नाम "1" से शुरू करना है, इसलिए यह पहले लोड होगा और यह आपकी डिफ़ॉल्ट साइट होगी।

अपाचे 2 पहली लोड की गई vhost फ़ाइल को डिफ़ॉल्ट पृष्ठ के रूप में बनाता है।


1
2017-11-13 11:02



डिफ़ॉल्ट अपाचे स्थापना भी है 000-default इस कारण के लिए आभासी मेजबान। - vp_arth


उपयोग करते समय <VirtualHost *:port> और जिन होस्टों की आप परवाह करते हैं, उनके लिए सर्वरनाम / सर्वरअलीस निर्दिष्ट करना, जो मुझे करना है।

मेरी स्थिति में थोड़ा सा पृष्ठभूमि:

मेरे पास आईएसपी से एक गतिशील आईपी पता है, इसलिए मेरा आईपी पता एक गतिशील आईपी एड्रेस रजिस्टर कंपनी (मेरे मामले में noip.org) पर पंजीकृत है। मेरे "मेजबान" में से एक को मेरे DNS पंजीकरण में myabc.example.com के रूप में पंजीकृत किया जाना चाहिए जो एक CNAME के ​​रूप में है जो host1.ddns.net को इंगित करता है। लेकिन host2.ddns.net जैसा ही छोड़ा गया था। मैं myabc.example.com और host1.ddns.net को साइट 1 और host2.ddns.net पर जाने के लिए साइट 2 पर जाने के लिए और डिफ़ॉल्ट रूप से जाने के लिए अपने आईपी पते सहित कुछ और चाहता था।

पहली conf फ़ाइल पढ़ी डिफ़ॉल्ट होगी, यानी। 000_def.conf, 001_site1.conf, 002_site2.conf उस क्रम में पढ़ा जाएगा 000_def.conf डिफ़ॉल्ट साइट के रूप में। (नोट: मेरे मामले में, मेरे पास इन "फाइलें" हैं /etc/apache2/sites-enabled जो वास्तव में वास्तविक conf फ़ाइल के लिए गतिशील लिंक हैं /etc/apache2/sites-available)

क्योंकि 001_site1.conf और 002_site2.conf में ServerName का उपयोग किया जा रहा है, इसे 000_def.conf में कुछ भी सेट किया जाना चाहिए।

# 000_def.conf:
<VirtualHost *:80>  
ServerName null
# NOTE: DO NOT USE "ServerAlias *" this seems to override the other conf files.
</VirtualHost>


# 001_site1.conf
<VirtualHost *:80>  
ServerName myabc.example.com
ServerAlias mylocalhostname host1.ddns.net
</VirtualHost>


# 002_site2.conf:
<VirtualHost *:80>  
ServerName host2.ddns.net
</VirtualHost>

0
2018-03-06 01:42