2012-09-09 13 views
40

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

मैं एक ही अपाचे उदाहरण पर चल रहे दो साइटों करना चाहते हैं, कुछ इस तरह - 192.168.2.8/site1 और 192.168.2.8/site2

मैं हलकों में दौर चल रहा है, लेकिन पर पल मुझे लगता है कि इस-

<VirtualHost *:2000> 

ServerAdmin [email protected] 
ServerName site1 
ServerAlias site1 

# Indexes + Directory Root. 
DirectoryIndex index.html 
DocumentRoot /home/user/site1/ 

# CGI Directory 
ScriptAlias /cgi-bin/ /home/user/site1/cgi-bin/ 

Options +ExecCGI 

# Logfiles 
ErrorLog /home/user/site1/logs/error.log 
CustomLog /home/user/site1/logs/access.log combined 

</VirtualHost> 

और

<VirtualHost *:3000> 

ServerAdmin [email protected] 
ServerName site2 
ServerAlias site2 

# Indexes + Directory Root. 
DirectoryIndex index.html 
DocumentRoot /home/user/site2/ 

# CGI Directory 
ScriptAlias /cgi-bin/ /home/user/site2/cgi-bin/ 

Options +ExecCGI 

# Logfiles 
ErrorLog /home/user/site2/logs/error.log 
CustomLog /home/user/site2/logs/access.log combined 

</VirtualHost> 
की तरह लग रहे 'साइटों से उपलब्ध (साइटों सक्षम करने के लिए सांकेतिक रूप से लिंक)' में दो conf फ़ाइलें

http.conf लगता है कि इस-

NameVirtualHost *:2000 
NameVirtualHost *:3000 

फिलहाल मैं इस त्रुटि- हो रही है

[error] VirtualHost *:80 — mixing * ports and non-* ports with a NameVirtualHostaddress is not supported, proceeding with undefined results 

Ports.conf इस तरह दिखता है - (हालांकि कोई गाइड संपादित करने के लिए किसी भी आवश्यकता का उल्लेख किया है यह)

NameVirtualHost *:80 

Listen 80 
<IfModule mod_ssl.c> 
# If you add NameVirtualHost *:443 here, you will also have to change 
# the VirtualHost statement in /etc/apache2/sites-available/default-ssl 
# to <VirtualHost *:443> 
# Server Name Indication for SSL named virtual hosts is currently not 
# supported by MSIE on Windows XP. 
Listen 443 
</IfModule> 

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

क्या कोई इसे चलाने के लिए कुछ सरल निर्देश दे सकता है? मैंने जो भी गाइड पाया है, वह इसे एक अलग तरीके से करने के लिए कहता है, और प्रत्येक व्यक्ति अलग-अलग त्रुटियों का कारण बनता है। मैं स्पष्ट रूप से कुछ गलत कर रहा हूं लेकिन मुझे क्या हो सकता है इसका कोई स्पष्ट स्पष्टीकरण नहीं मिला है।

बस पोर्ट 2000 पर एक साइट तक पहुंच योग्य है और दूसरा पोर्ट 3000 पर पहुंच योग्य है (या जो भी हो, बस उन बंदरगाहों को परीक्षण करने के लिए चुना गया है)।

मैं Ubuntu सर्वर 12.04 चल रहा हूँ ...

=============

संपादित

एक और 'गाइड' इसके बाद ...

अब मैं-उपलब्ध साइटों में इस सेट कर दिया है:

<VirtualHost *:80> 
    DocumentRoot "/home/user/site1/" 
    ServerName 192.168.2.10/site1 
</VirtualHost> 

<VirtualHost *:80> 
    DocumentRoot "/home/user/site2/" 
    ServerName 192.168.2.10/site2 
</VirtualHost> 

apache2.conf में यह निर्धारित किया है:

ServerName site1 
ServerName site2 

ports.conf को यह जोड़ा है:

Listen 192.168.2.10:80 

==============

संपादित

अब यह काम करता है, मैं इसे साइट-सक्षम में एक conf फ़ाइल में रखें:

<VirtualHost *:81> 
    DocumentRoot "/home/user/site1/" 
    ServerName site1 
</VirtualHost> 

<VirtualHost *:82> 
    DocumentRoot "/home/user/site2/" 
    ServerName site2 
</VirtualHost> 

मेरे पास यह पोर्ट्स.कॉन्फ़ में है:

Listen *:80 
Listen *:81 
Listen *:82 

मेरे पास यह apache2 में है।conf:

ServerName site1 
ServerName site2 

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

+0

ऐसा लगता है कि आपको NameVirtualHost में वर्चुअल होस्टनाम निर्दिष्ट करने की आवश्यकता है। –

+0

चीयर्स, मैंने उन पंक्तियों के साथ कई चीजों की कोशिश की है, क्या आप इस बारे में अधिक विशिष्ट हो सकते हैं कि मुझे वहां क्या लगाने की कोशिश करनी चाहिए? – Exbi

+0

पूरे दिन काम करने के लिए इसे आजमाने की कोशिश करने के बाद, मैं आखिर में जवाब के जवाब में ठोकर खाई। मैं मानसिक रूप से सूखा महसूस करता हूं, मैं बिस्तर पर जा रहा हूँ। मुझे संदेह है कि मेरे डोडी अपाचे हैक समाधान किसी के लिए ब्याज का होगा, लेकिन मैं इसे अपने प्रश्न के अंत में संपादित कर दूंगा। – Exbi

उत्तर

62

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

आपके शेष प्रश्न के आधार पर, आप वास्तव में क्या करना चाहते हैं, उसी सर्वर पर विभिन्न डोमेन साइटों के साथ विभिन्न साइट चलाते हैं।

विषय पर आपको मिलेगा सबसे अच्छा दस्तावेज virtual host अपाचे मैनुअल में प्रलेखन है।

दो प्रकार के वर्चुअल होस्ट हैं: नाम-आधारित और आईपी-आधारित। नाम-आधारित आपको एक एकल आईपी पता का उपयोग करने की अनुमति देता है, जबकि आईपी-आधारित प्रत्येक साइट के लिए एक अलग आईपी की आवश्यकता होती है। उपरोक्त आपके विवरण के आधार पर, आप नाम-आधारित वर्चुअल होस्ट का उपयोग करना चाहते हैं।

आपको जो प्रारंभिक त्रुटि मिल रही थी वह इस तथ्य के कारण थी कि आप NameVirtualHost लाइन से अलग बंदरगाहों का उपयोग कर रहे थे। यदि आप वास्तव में 80 से अधिक बंदरगाहों से साइट्स पर सेवा करना चाहते हैं, तो आपको प्रत्येक पोर्ट के लिए NameVirtualHost प्रविष्टि की आवश्यकता होगी।

मान लीजिए कि आप खरोंच से शुरू कर रहे हैं, यह ऐसा लगता है जितना आसान हो सकता है।

पहली चीज़ जो आपको करने की ज़रूरत है वह अपाचे बताती है कि आप नाम-आधारित वर्चुअल होस्ट का उपयोग करने जा रहे हैं।

NameVirtualHost *:80 

अब जब कि अपाचे जानता है कि आप क्या करना चाहते हैं, आप सेटअप कर सकते हैं अपने vhost परिभाषाएँ:

<VirtualHost *:80> 
    DocumentRoot "/home/user/site1/" 
    ServerName site1 
</VirtualHost> 

<VirtualHost *:80> 
    DocumentRoot "/home/user/site2/" 
    ServerName site2 
</VirtualHost> 

ध्यान दें कि आप के रूप में कई साइटों के रूप में आप एक ही बंदरगाह पर चाहते हैं चला सकते हैं। ServerName अलग होने के कारण अपाचे को बताने के लिए पर्याप्त है जो vhost का उपयोग करना है। इसके अलावा, ServerName निर्देश हमेशा डोमेन/होस्टनाम है और इसमें कोई पथ शामिल नहीं होना चाहिए।

यदि आप 80 से अधिक पोर्ट पर साइटों को चलाने का निर्णय लेते हैं, तो आपको साइट तक पहुंचने पर हमेशा यूआरएल में पोर्ट नंबर शामिल करना होगा। तो http://example.com लिए जाने के बजाय आप के रूप में आप चाहते हैं आप के रूप में कई समानांतर कार्यक्रमों हो सकता है आभासी मेजबान के साथ http://example.com:81

+0

क्या आप 80 से अधिक बंदरगाह के मामले को विस्तारित कर सकते हैं। मैं वास्तव में इसे लागू करने में उलझन में हूं। :) – user79307

+1

@accssharma डिफ़ॉल्ट अपाचे (और अन्य सभी वेब सर्वर सॉफ़्टवेयर) पोर्ट 80 पर कनेक्शन के लिए सुनता है। इस वजह से, वेबसाइटों का अनुरोध करते समय ब्राउज़रों को पोर्ट 80 से कनेक्ट करने के लिए कोड किया जाता है। यदि आप 80 से अधिक पोर्ट पर वेबसाइट चलाते हैं, तो साइट पर अनुरोध करते समय आपके उपयोगकर्ताओं को हमेशा पोर्ट नंबर शामिल करना होगा। मैं इसके खिलाफ दृढ़ता से अनुशंसा करता हूं। – bradym

+0

@accssharma यदि आप 80 से अधिक पोर्ट पर कोई साइट चलाने का विकल्प चुनते हैं, तो आपको पोर्ट को निर्दिष्ट करने वाली नाम वर्चुअलहोस्ट लाइन की आवश्यकता होगी, फिर वर्चुअलहोस्ट कंटेनर उसी पोर्ट को निर्दिष्ट करते हैं। असल में, जो मैंने ऊपर प्राप्त किया है उसकी प्रतिलिपि बनाएँ और उस पोर्ट के साथ 80 को प्रतिस्थापित करें जहां आप साइट को चलाने का इरादा रखते हैं। – bradym

3

हाँ करने के लिए जाना होगा:

ओपन

/etc/httpd/conf/httpd।conf

Listen 81 
Listen 82 
Listen 83 

<VirtualHost *:81> 
    ServerAdmin [email protected] 
    DocumentRoot /var/www/site1/html 
    ServerName site1.com 
    ErrorLog logs/site1-error_log 
    CustomLog logs/site1-access_log common 
    ScriptAlias /cgi-bin/ "/var/www/site1/cgi-bin/" 
</VirtualHost> 

<VirtualHost *:82> 
    ServerAdmin [email protected] 
    DocumentRoot /var/www/site2/html 
    ServerName site2.com 
    ErrorLog logs/site2-error_log 
    CustomLog logs/site2-access_log common 
    ScriptAlias /cgi-bin/ "/var/www/site2/cgi-bin/" 
</VirtualHost> 

<VirtualHost *:83> 
    ServerAdmin [email protected] 
    DocumentRoot /var/www/site3/html 
    ServerName site3.com 
    ErrorLog logs/site3-error_log 
    CustomLog logs/site3-access_log common 
    ScriptAlias /cgi-bin/ "/var/www/site3/cgi-bin/" 
</VirtualHost> 

पुनः प्रारंभ अपाचे

service httpd restart

अब आप उल्लेख कर सकते हैं site1:

http://<ip-address>:81/ 
http://<ip-address>:81/cgi-bin/ 

Site2:

http://<ip-address>:82/ 
http://<ip-address>:82/cgi-bin/ 

Site3:

http://<ip-address>:83/ 
http://<ip-address>:83/cgi-bin/ 

पथ किसी भी स्क्रिप्ट में hardcoded नहीं है, तो फिर अपने वेबसाइटों समेकित रूप से काम करना चाहिए।