अपाचे - केवल विशिष्ट डोमेन पर सुनें, आईपी नहीं


9

मैं अपाचे को कैसे कॉन्फ़िगर कर सकता हूं ताकि यह सीधे आईपी पते ( http://xxx.xxx.xxx.xxx ) पर आने वाले कनेक्शन को मना कर दे, बजाय इसके कि vhost नाम http://example.com ?

मेरा VirtualHost कॉन्फ़िगरेशन:

ServerName example.com

<VirtualHost *:80>

        ServerName example.com

        DocumentRoot /var/www/           
        <Directory /var/www/>                    
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

</VirtualHost>

जवाबों:


25

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

क्या इसके बजाय HTTP त्रुटि प्रतिक्रिया स्वीकार्य होगी?

<VirtualHost *:80>
    ServerName catchall
    <Location />
        Order allow,deny
        Deny from all
    </Location>
</VirtualHost>

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/
    <Directory /var/www/>
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>
</VirtualHost>

खैर, पतली डोमेन से नहीं आने वाले अनुरोधों के लिए 403 निषिद्ध है, जो मेरी स्थिति में बुरा नहीं है। हालाँकि, मैं चाहता हूं कि सर्वर उन अनुरोधों के लिए "गैर-मौजूद" हो। मुझे यकीन है कि यह किसी भी तरह किया जा सकता है, शायद अपाचे के साथ नहीं बल्कि सिस्टम स्तर पर?
एलेक्स

3
@ एलेक्स नहीं, यह पूरी तरह से असंभव है। टीसीपी कनेक्शन को स्थापित किया जाना चाहिए और क्लाइंट को अपने HTTP अनुरोध में डोमेन नाम या आईपी पते को हिट करने की कोशिश कर रहे हैं यह निर्धारित करने के लिए सर्वर के लिए कोई भी तरीका होने से पहले उनके HTTP अनुरोध (या उनके एसएनआई हेडर, मुझे लगता है) को भेजना होगा। ।
शेन मैडेन

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

3
@ हेल्पिंगहैंड उपयोगकर्ता का आईपी नहीं। सर्वर को होस्ट हेडर को जानने की आवश्यकता है जो उपयोगकर्ता HTTP अनुरोध में भेजेगा, जो टीसीपी कनेक्शन पूरी तरह से स्थापित होने के बाद तक उसके पास नहीं होगा।
शेन मैडेन

1
@ हेल्पिंगहैंड नहीं, यह कनेक्शनों में होने वाले HTTP संचार में दृश्यता नहीं है।
शेन मैडेन

0

आपको निचली परत पर जाना होगा यह केवल मेरे दिमाग में आता है फ़ायरवॉल श्रृंखला में REQUEST HOST के लिए एक सत्यापन जाँच और आपके पास अपाचे के साथ क्या है यह पैकेज को अनदेखा करने या छोड़ने की अनुमति देगा


हालांकि अपाचे स्तर पर ऐसा करना पूरी तरह से संभव है, इसलिए यह ओवरकिल होगा। एक सरल तरीका यह सुनिश्चित करना होगा कि पहला vhost एक catchall था जो HTTP दोस्ताना तरीके से उपयोग करने से इनकार करता था।
पॉल डिक्सन

0

इसे संभालने के लिए एक साफ तरीका एक रीराइट्रूले के साथ है

<If "%{HTTP_HOST} == 'x.x.x.x'">
  RewriteRule ^.*$ http://www.example.com/$1 [L]
</If>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.