Apache2 में डिफ़ॉल्ट VirtualHost को कैसे निष्क्रिय करें?


10

डिज़ाइन के अनुसार Apache2 में, अज्ञात होस्ट के साथ किसी भी http अनुरोध को पहले लोड किए गए VirtualHost पर निर्देशित किया जाएगा। क्या इस सुविधा को अक्षम करने का कोई तरीका है? अलग तरीके से कहा, मैं एक वेब सर्वर रखना चाहता हूं, जहां उपयोगकर्ता केवल वर्चुअलहॉट परिभाषाओं को स्पष्ट रूप से नाम दे सके। ServerName या ServerAlias ​​लाइन में स्पष्ट रूप से उल्लेखित किसी भी अन्य होस्टनाम को चुपचाप नजरअंदाज नहीं किया जाना चाहिए।

क्या यह संभव है?

Listen 80
NameVirtualHost *

<VirtualHost _default_:*>
# Anything matching this host should be silently ignored.
</VirtualHost>

<VirtualHost *>
DocumentRoot /www/example1
ServerName www.example.com
</VirtualHost>

<VirtualHost *>
DocumentRoot /www/example2
ServerName www.example.org
</VirtualHost>

अद्यतन: जैसा कि नीचे और अन्य जगहों पर सुझाया गया है, चुपचाप एक अनुरोध को अनदेखा करना एक अच्छा विचार नहीं हो सकता है और शायद HTTP के लिए RFC को तोड़ता है। हालाँकि, वर्चुअल होस्ट्स को अनुकरण करने के लिए डिज़ाइन किया गया है जिसमें कई अलग-अलग भौतिक HTTP सर्वर हैं, लेकिन मौन उपेक्षा दृष्टिकोण मेरे लिए अनुचित नहीं है। यह IP- आधारित वर्चुअल होस्टिंग के समान होगा और कुछ IPs को बंद करना होगा (शायद सभी क्लाइंट के लिए नहीं)।

जवाबों:


4

मुझे यकीन नहीं है कि "चुपचाप विफल" एक अच्छा विचार है। आपको ग्राहक को कम से कम कुछ संकेत देना चाहिए कि क्या हुआ। शायद आप एक http 410 "चला गया" त्रुटि भेज सकते हैं। कुछ इस तरह करना चाहिए ट्रिक:

RewriteRule ^.*$ - [G]

इसके अलावा, आपको एक कस्टम 410 त्रुटि दस्तावेज़ निर्दिष्ट करने में सक्षम होना चाहिए, जो कि केवल एक खाली HTML पृष्ठ हो सकता है।


मैंने इस समाधान को स्वयं ही खोज लिया। आपको mod_rewrite और "RewriteEngine On" लोड करने के लिए लाइनें जोड़नी चाहिए, यह देखते हुए कि वे आवश्यक नहीं हो सकते हैं। वे मेरे लिए थे। :)
हार्वे

2
इसके अलावा, जब से हम सिर्फ गोन या फॉरबिडेन और अधिक महत्वपूर्ण रूप से कह रहे हैं, "-" प्रतिस्थापन को रोकता है, रेगेक्स बहुत सरल हो सकता है:RewriteRule . - [F]
हार्वे

17

यहाँ एक वैकल्पिक तरीका है जिसमें नियमों को फिर से लिखना शामिल नहीं है:

<VirtualHost _default_:*>
    <Location />
        Deny from all
        Options None
        ErrorDocument 403 Forbidden.
    </Location>
</VirtualHost>

2
यह स्वीकृत समाधान होना चाहिए। +1
ग्रेग स्मिट

मैं इस समाधान पर स्पष्ट नहीं हूं। मेरे पास कई VHOST फाइलें हैं और क्या मैं इसमें इसके साथ एक नया बना सकता हूं? मैंने कोशिश की है, और मैंने फ़ाइल का नाम 001.default.conf रखा है, लेकिन मुझे अभी भी अपने सबडोमेन के पुन: निर्देशन हो रहे हैं।
Frantumn

@Frantumn इस प्रश्न के अनुसार, "किसी अज्ञात होस्ट के साथ कोई http अनुरोध पहले लोड किए गए VirtualHost को निर्देशित किया जाएगा "। <VirtualHost>इसलिए इस "डिफ़ॉल्ट" को पहले सर्वर कॉन्फिगर में परिभाषित किया जाना चाहिए । संभवतः वह कौन सी फ़ाइल है जो आपके कॉन्फ़िगरेशन पर निर्भर है। (हालांकि, आपका "पुनर्निर्देशित उप-डोमेन" मुद्दा एक असंबंधित समस्या हो सकती है।)
Mrhhite

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

1

यह मेरे लिए काम किया

<VirtualHost x.x.x.x:80 [x:x::x:x:x:x]:80>
  ServerName myactualservername.com
  ServerAlias *
  <Location />
    Deny from all
    Options None
    ErrorDocument 403 Forbidden.
  </Location>
</VirtualHost>

xxxx को अपने वास्तविक ipv4 और ipv6 से
बदलें myactualservername.com को मशीन द्वारा दी गई वास्तविक वेबसाइट से बदलें

मैं नाम आधारित वर्चुअल होस्ट का उपयोग कर रहा हूं।
इस समाधान का श्रेय https://serverfault.com/a/82309/459796 को जाता है

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