अपाचे अनुरोधित URL से मेल खाने वाले ServerName के साथ अपाचे एक आभासी मेजबान की उपेक्षा क्यों कर सकता है?


26

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

मेरी httpd.confबस में निम्न पंक्ति है:

ServerName radiofreebrighton.org.uk

मेरे पास एक ports.confफ़ाइल भी है , जिसमें निम्नलिखित शामिल हैं:

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
    Listen 443
</IfModule>

मेरे पास दो फाइलें हैं, sites-availableजिनके sites-enabledद्वारा हमदर्द थे a2ensite:

  • radiofreebrighton.org.uk
  • trafalgararches.co.uk

पहले की सामग्री है:

<VirtualHost _default_:80>
    DocumentRoot /home/tom/www

    ServerAdmin tom@radiofreebrighton.org.uk
    ServerName radiofreebrighton.org.uk
    ServerAlias www.radiofreebrighton.org.uk

    <Directory /home/tom/www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>

    ErrorLog /var/log/apache2/error.log
    LogLevel error
    CustomLog /var/log/apache2/access.log combined

    Alias /wiki /home/tom/www/mediawiki/index.php
</VirtualHost>

उत्तरार्द्ध की सामग्री है:

<VirtualHost *:80>
    DocumentRoot /home/tom/tata-www

    ServerAdmin admin@trafalgararches.co.uk
    ServerName trafalgararches.co.uk
    ServerAlias www.trafalgararches.co.uk

    <Directory /home/tom/tata-www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>

    logLevel error
    ErrorLog /var/log/apache2/error.log
</VirtualHost>

लेकिन जब भी मैं trafalgararches.co.uk से एक पृष्ठ का अनुरोध करता हूं, मुझे radiofreebrighton.org.uk से एक पृष्ठ दिया जाता है। ऐसा क्यों हो रहा होगा? मेरे द्वारा यह कैसे किया जा सकता है?


संपादित करें:

अपाचे द्वारा समझा गया वर्चुअल होस्ट कॉन्फ़िगरेशन:

tom@rfb:/usr/local$ apache2ctl -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server radiofreebrighton.org.uk (/etc/apache2/sites-enabled/radiofreebrighton.org.uk:1)
         port 80 namevhost radiofreebrighton.org.uk (/etc/apache2/sites-enabled/radiofreebrighton.org.uk:1)
         port 80 namevhost trafalgararches.co.uk (/etc/apache2/sites-enabled/trafalgararches.co.uk:1)
Syntax OK

( apache2ctl -Sउर्फ के माध्यम से चमकता हुआ httpd -S।)


1
सुनिश्चित नहीं है कि यह कारण है, लेकिन आपको अपने ServerNameऔर ServerAliasरेखाओं के सिरों से स्लैश को दूर करना चाहिए । इसके अलावा, सुनिश्चित करें कि आपने अपाचे को पुनरारंभ कर दिया है।
EEAA

मैं लगभग सकारात्मक कारण हूं। इसका अर्थ है कि अनुरोध में होस्टनाम उस वर्चुअल होस्ट के लिए सर्वरनाम से कभी मेल नहीं खाएगा।
लार्क्स जूल

1
@ एरिक, @ लार्क्स - तुम लोग मेरी आशाओं पर खरे उतरे! मैंने अनुगामी स्लैश को हटा दिया और अपाचे को फिर से शुरू किया, लेकिन यह कुछ भी नहीं बदला।
टॉम राइट

1
क्या आपके पास NameVirtualHost *:80आपके कॉन्फ़िगरेशन में कहीं है?
लार्क्स जूल

1
मुझे यकीन नहीं है कि ऊपर वर्णित साइटें उत्पादन या विकास हैं, लेकिन वास्तव में उन URL पर जाना मेरे लिए दो अलग-अलग पृष्ठ देता है (इसके द्वारा सही पृष्ठ)। यदि उपरोक्त vhosts एक विकास सर्वर पर हैं, तो इस टिप्पणी को अनदेखा करें। अन्यथा, आपने अपनी समस्या को कहीं न कहीं तय कर लिया होगा और अभी भी एक कैश्ड कॉपी के आस-पास बैठे हैं।
साइबरबरी

जवाबों:


15

ठीक है, यह सवाल एक साल से अधिक पुराना है, लेकिन मैं इसी तरह की "समस्या" से लड़ रहा हूं। यह स्पष्ट हो सकता है, लेकिन अतिरिक्त वर्चुअल होस्ट को सक्षम करने के बाद एपाचे सेवा को पुनरारंभ करना न भूलें। देखें, a2ensiteदूसरे वर्चुअल होस्ट के लिए निष्पादित करने के बाद , apache2ctl -Sयह दिखाएगा कि दोनों साइटें उपलब्ध हैं (और उनमें से एक डिफ़ॉल्ट है), भले ही आपने अपाचे को फिर से लोड नहीं किया हो।

मान लीजिए कि आपके पास दो वर्चुअल होस्ट हैं - साइट 1 और साइट 2। आप चलाएँ a2ensite site1और फिर अपाचे सेवा पुनः लोड करें। अब आप एक्सेस कर सकते हैं http://site1और यह डिफ़ॉल्ट है। अब आप चलाते हैं a2ensite site2, लेकिन अपाचे को पुनः आरंभ करना भूल जाते हैं। का उत्पादन apache2ctl -Sहोगा:

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server site1 (/etc/apache2/sites-enabled/site1:1)
         port 80 namevhost site1 (/etc/apache2/sites-enabled/site1:1)
         port 80 namevhost site2 (/etc/apache2/sites-enabled/site2:1)
Syntax OK

लेकिन जब आप लोड करने की कोशिश करते हैं http://site2, तो यह वास्तव में डिफ़ॉल्ट साइट (साइट 1) को लोड करेगा, क्योंकि कॉन्फ़िगरेशन लोड नहीं है।


मुझे एक ही आउटपुट मिलता है लेकिन फिर भी यह दूसरी वेबसाइट को लोड नहीं करता है।
arqam

15

मुझे ऐसी ही समस्या थी जहाँ पोर्ट 443 (एसएसएल / एचटीटीपीएस) पर मेरे अतिरिक्त vhosts को सूचीबद्ध पहली vhost की निर्देशिका में निर्देशित किया जा रहा था। अपाचे अनिवार्य रूप से सर्वरनाम संपत्ति की उपेक्षा कर रहा था और आईपी पर मेल कर रहा था: केवल पोर्ट।

यह बताता है कि मुझे कमांड 'NameVirtualHost *: 443' याद आ रही थी, ताकि पोर्ट 443 के लिए वर्चुअल होस्टिंग को नामांकित किया जा सके।

'NameVirtualHost *: 443' को केवल एक बार कॉल करने की आवश्यकता है, और इसे पोर्ट 443 के लिए आपके vhosts के ऊपर परिभाषित किया जाना चाहिए। मैंने अपनी परिभाषा ports.config फ़ाइल में डाल दी है, इसलिए ऐसा दिखता है:

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
    NameVirtualHost *:443
    Listen 443
</IfModule>

<IfModule mod_gnutls.c>
    NameVirtualHost *:443
    Listen 443
</IfModule>

किसी भी परिवर्तन के बाद अपाचे को पुनः आरंभ करना न भूलें।


1
इसके लायक क्या है ... अपाचे 2.4.18 में, NameVirtualHostस्टार्टअप पर इस संदेश का उपयोग करते हुए :AH00548: NameVirtualHost has no effect and will be removed in the next release /etc/apache2/ports.conf
लैम्बार्ट

4

मेरे 2 सेंट: जैसा कि मुझे एक आईपी के साथ रहना है (मैं नहीं चाहता कि साइट सभी नेटवर्क पर स्थापित की जाए), ऐसा हुआ कि सर्वर के स्थानीय निजी आईपी बदलने के बाद, मैं इसे यहां बदलना भूल गया:

NameVirtualHost 192.168.100.20:80 <VirtualHost 192.168.100.20:80>

बेशक, यह अपाचे समस्या नहीं है आपको यह बताने के लिए कि आईपी स्थानीय रूप से मौजूद नहीं है।


2

टॉम, कृपया यहाँ देखें http://httpd.apache.org/docs/2.0/en/mod/core.html#name/irtualualhost

ध्यान दें

ध्यान दें, कि "मुख्य सर्वर" और किसी भी डिफ़ॉल्ट सर्वर को NameVirtualHost IP पते के अनुरोध के लिए कभी भी सेवा नहीं दी जाएगी (जब तक कि किसी कारण से आप NameVirtualHost को निर्दिष्ट नहीं करते हैं लेकिन फिर उस पते के लिए कोई VirtualHosts परिभाषित नहीं करते हैं)।

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


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

1

मुझे यहाँ से उत्तर मिला: http://alexking.org/blog/2007/11/01/apache-2-only-serves-first-virtual-host

नीचे के रूप में एक ही VirtualHost टैग में 2 servername डालें:

<VirtualHost *:80>
ServerName beta-site-1.com
DocumentRoot "/Library/WebServer/beta-site-1"

ServerName beta-site-2.com
DocumentRoot "/Library/WebServer/beta-site-2"
</VirtualHost>

मैंने दूसरी साइट के साथ समस्याएँ समाप्त कीं क्योंकि मेरे पास दो वर्चुअलहॉट टैग ब्लॉक थे।


0

मुझे यह समस्या एक नए उबंटू 16 सर्वर पर माइग्रेट करने वाली साइटों की थी। थोड़ा सिर खुजलाने के बाद, मुझे एहसास हुआ कि एसएसएल मॉड्यूल को डिफ़ॉल्ट रूप से सक्षम नहीं किया गया था, इसलिए <IfModule mod_ssl.c>ब्लॉक के अंदर कुछ भी निश्चित रूप से खामोश नजरअंदाज कर दिया गया है।

बरसों पहले मैंने अपने सभी SSL vhost को इस सशर्त में लपेटा था, और इस बार मैंने नए सर्वर पर कॉन्फिग फाइल को कॉपी किया था।

मैंने मॉड्यूल को सक्षम करके इसे ठीक किया:

sudo a2enmod ssl

0

मुझे पता चला कि इस समस्या का स्रोत सर्वर के बाहरी आईपी की ओर इशारा करते हुए URL के साथ मेरे सर्वर पर एक / etc / मेजबान प्रविष्टि था।

DNS के तैयार होने से पहले एक बिंदु पर मैं इसे स्थापित कर रहा था इसलिए मैंने अपने सर्वर पर अपने बाहरी आईपी की ओर इशारा करते हुए / etc / host में प्रवेश किया:

1.2.3.4 vhost.example.com

फिर मैंने "vhost.example.com" के लिए एक मौजूदा साइट पर एक सर्वरएलाइज़ की स्थापना की।

लेकिन मैं कुछ भी नहीं कर सका अपाचे को डिफ़ॉल्ट अनुरोधों के लिए ssl.conf साइट को सेव करने के लिए SSL अनुरोधों के लिए vhost.example.com। पोर्ट 80 HTTP ने ठीक काम किया, लेकिन एसएसएल ने इसके बजाय हमेशा डिफ़ॉल्ट साइट दिखाई। अंत में इस SO थ्रेड ने मुझे "apachectl -S" की कोशिश करने के लिए प्रेरित किया, जो साइटों को दिखाता है और आखिरकार मैं इसका पता लगाने में सक्षम था।

इसलिए यदि आप अपेक्षित साइट के बजाय डिफ़ॉल्ट एसएसएल साइट प्राप्त कर रहे हैं, तो सुनिश्चित करें कि आपने अपने सर्वर के बाहरी आईपी पते को / etc / मेजबान प्रविष्टि में नहीं जोड़ा है! एक बहुत ही अजीब बात है, जो कि अड़चन में है, लेकिन उम्मीद है कि इससे किसी और को मदद मिलेगी!

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