2009-03-24 12 views
52

मेरे पास < वर्चुअलहोस्ट > निर्देशों की एक लंबी और जटिल सूची है, और मुझे पोर्ट 80 और 443 के लिए अलग-अलग < वर्चुअलहोस्ट > समूहों में डुप्लिकेट करना है क्योंकि मैं SSL का उपयोग कर रहा हूं। जब भी मैं अपने mod_rewrite नियमों को अद्यतन करता हूं मुझे इसे दोनों जगहों पर करना याद रखना होगा या नहीं तो मैं अपना ऐप तोड़ दूंगा ... यह डुप्लिकेशन समस्या के लिए पूछ रहा है। क्या इन्हें गठबंधन करने या उपनाम करने का कोई तरीका है - दोनों के बीच एकमात्र अंतर यह है कि पोर्ट 443 संस्करण में एसएसएलईजीएनईएन, एसएसएल प्रमाणपत्र प्रमाण और शामिल है।क्या मुझे पोर्ट 80 और 443 के लिए वर्चुअलहोस्ट निर्देशों को डुप्लिकेट करना है?

मेरे < वर्चुअलहोस्ट > कई mod_rewrite नियम, LocationMatch नियम, सीजीआई निर्देशों, शामिल आदि

इसके अलावा, मैं फ़ाइलों .htaccess का उपयोग नहीं कर सकते हैं।

+1

http://serverfault.com/questions/83669/apache2-with-ssl-do-i-have-to-copy-virtualhost-blocks का एक डुप्लिकेट –

उत्तर

43

क्या आप आम नियमों को शामिल करने के लिए एक निर्देश शामिल नहीं कर सकते हैं। here

article

उदा .:

<VirtualHost _default_:80> 
    ... 
    include conf/common_rule.conf 
</VirtualHost> 

<VirtualHost _default_:*> 
    ... 
    include conf/common_rule.conf 
</VirtualHost> 

<VirtualHost _default_:443> 
    ... #SSL rules 
    include conf/common_rule.conf 
</VirtualHost> 
+0

इसके लिए धन्यवाद; बीटीडब्ल्यू, [यहां एक अद्यतन संस्करण है] (http://httpd.apache.org/docs/2.4/mod/core.html#include) अपाचे 'शामिल' निर्देश का, जो आपके उत्तर में पहला लिंक-टू संसाधन है –

+0

धन्यवाद, मैंने इसे अभी अपडेट किया है। – sfossen

2

आप एक अलग फ़ाइल में सामान्य विन्यास रख दिया और यह दोनों VirtualHost क्षेत्रों में शामिल हो सकते हैं। उदाहरण के लिए:

<VirtualHost 192.168.1.2:80> 
    Include conf/common.conf 
</VirtualHost> 

<VirtualHost 192.168.1.2:443> 
    Include conf/common.conf 
    (put your ssl specific cofiguration stuff here ...) 
</VirtualHost> 
0

आप अपने भीतर के बजाय एक कंटेनर के भीतर सामान्य निर्देश भी निर्दिष्ट कर सकते हैं। मैं यही करता हूं, अधिकांशतः क्योंकि मैं सर्वर स्तर के बजाय निर्देशिका स्तर पर mod_rewrite नियमों को प्राथमिकता देता हूं, लेकिन यह आपके लिए भी उतना ही अच्छा काम करना चाहिए।

+3

आप एक गंभीर रूप से महत्वपूर्ण शब्द याद कर रहे हैं। क्या आप इसे जोड़ सकते हैं? और यदि आप एक उदाहरण दे सकते हैं जो सहायक भी होगा। – iconoclast

32

आप किसी भी वर्चुअलहोस्ट निर्देश में किसी भी मेजबान और बंदरगाहों का उपयोग कर सकते हैं।

<VirtualHost addr[:port] [addr[:port]] ...> ... </VirtualHost> 

मेरे मामले में मैंने उपयोग किया।

<VirtualHost *:80 *:443> 
    ServerName loop.lk 

.... 
SSLEngine on 
SSLCertificateFile /etc/apache2/ssl/local.crt 

</VirtualHost> 
+8

एसएसएलईजीएनएन पर लागू होता है जब साइट http के माध्यम से एक्सेस की जाती है, जिसके परिणामस्वरूप एक त्रुटि पृष्ठ होता है। –

+2

यदि आपके पास '' ब्लॉक है, तो मुझे लगता है कि आप ' 'के लिए एक अलग ब्लॉक कर सकते हैं जिसमें केवल SSL सामान शामिल है। क्या वो सही है? – iconoclast

+3

@iconoclast नहीं, आपके पास कोई अन्य निर्देश नहीं हो सकता है। आप उपयोग कर सकते हैं <तो "% {SERVER_PROTOCOL}! = 'Https'"> \t .... या <हैं "% {SERVER_PORT}! = '443'"> \t ... –

7

इस तरह एक पुरानी पोस्ट तक सामने लाना क्षमा करें, लेकिन आदेश वहाँ मैं साझा करना चाहते थे अन्य Google विशेषज्ञ मदद करने के लिए कैसे dealed इसके साथ मैं:

मैं अपने स्थानीय होस्ट पर vhosts की एक जोड़ी है, कहें: लोकलहोस्ट, foo.com, bar.com

यह मेरे लैपटॉप (मैकोज़क्स) पर एक स्थानीयहोस्ट साइट होने के नाते मैं स्वयं हस्ताक्षरित प्रमाणपत्रों से दूर हो सकता हूं और इस प्रकार एसएसएल-पार्ट सभी vhosts के लिए समान है। ..

मैंने जो किया वह यह है:

मैंने निर्देशिका /etc/apache2/extra/vhosts/ बनाया है।

मेरे द्वारा बनाए गए एक /etc/apache2/extra/vhosts/localhost.conf:

ServerName localhost 
DocumentRoot "/www/localhost" 
<Directory /www/localhost> 
    Require all granted 
</Directory> 
ErrorLog "/var/log/apache2/localhost.error_log" 
CustomLog "/var/log/apache2/localhost.access_log" common 

एक /etc/apache2/extra/vhosts/foo.conf:

ServerName foo.com 
DocumentRoot "/www/foo.com" 
<Directory /www/foo.com> 
    Require all granted 
</Directory> 
ErrorLog "/var/log/apache2/foo.com.error_log" 
CustomLog "/var/log/apache2/foo.com.access_log" common 

एक /etc/apache2/extra/vhosts/bar.conf:

ServerName bar.com 
DocumentRoot "/www/bar.com" 
<Directory /www/bar.com> 
    Require all granted 
</Directory> 
ErrorLog "/var/log/apache2/bar.com.error_log" 
CustomLog "/var/log/apache2/bar.com.access_log" common 

और अंत में एक /etc/apache2/extra/vhosts/ssl.conf:

+०१२३५१६४१०
SSLEngine on 
SSLCertificateFile "/etc/apache2/ssl/server.crt" 
SSLCertificateKeyFile "/etc/apache2/ssl/server.key" 

और मेरे /etc/apache2/extra/httpd-vhosts.conf में:

<VirtualHost *:80> 
    Include /etc/apache2/extra/vhosts/localhost.conf 
</VirtualHost> 
<VirtualHost *:443> 
    Include /etc/apache2/extra/vhosts/localhost.conf 
    Include /etc/apache2/extra/vhosts/ssl.conf 
</VirtualHost> 

<VirtualHost *:80> 
    Include /etc/apache2/extra/vhosts/foo.conf 
</VirtualHost> 
<VirtualHost *:443> 
    Include /etc/apache2/extra/vhosts/foo.conf 
    Include /etc/apache2/extra/vhosts/ssl.conf 
</VirtualHost> 

<VirtualHost *:80> 
    Include /etc/apache2/extra/vhosts/bar.conf 
</VirtualHost> 
<VirtualHost *:443> 
    Include /etc/apache2/extra/vhosts/bar.conf 
    Include /etc/apache2/extra/vhosts/ssl.conf 
</VirtualHost> 
+0

इस समाधान के साथ भी चला गया। बहुत अच्छा काम करता है –

संबंधित मुद्दे