SSL के साथ Apache2 क्या मुझे VirtualHost ब्लॉक कॉपी करना है?


18

Ubuntu पर Apache2 में मेरे पास 80 पर मेरी साइट है, और अब मैं SSL जोड़ना चाहता हूं। क्या पोर्ट 443 के लिए SSLEngine को सक्षम करने का एक तरीका है, इसलिए मुझे पूरे VirtualHost ब्लॉक को कॉपी करने की आवश्यकता नहीं है?

जब मैं ऐसा करता हूं:

Listen 80
Listen 443
NameVirtualHost *
<VirtualHost *>
  SSLEngine On
  ... a bunch more lines...
</VirtualHost>

यह पोर्ट 80 के लिए SSLEngine को चालू कर रहा है। क्या केवल एक VirtualHost ब्लॉक का उपयोग करने का एक तरीका है, और केवल पोर्ट 443 के लिए SSLEngine चालू करता है? तो मैं ऐसा कुछ कर सकता हूं?

Listen 80
Listen 443
NameVirtualHost *
<VirtualHost *>
   <IfPort 443>
      SSLEngine On
   </IfPort>
   ... a bunch of lines I don't want to copy into another VirutalHost block...
</VirtualHost>

जवाबों:


14

आप HTTP और HTTPS दोनों में एक vhost नहीं कर सकते, क्योंकि वे अलग-अलग प्रोटोकॉल की सेवा करने वाले अलग-अलग vhosts हैं। इसके बजाय, आपको सभी सामान्य कॉन्फ़िगरेशन को एक अलग फ़ाइल में रखना चाहिए, और फिर उस फ़ाइल को एसएसएल और गैर-एसएसएल दोनों में डोमेन के लिए शामिल करना चाहिए।

न्यूनतम उदाहरण:

# /etc/apache2/sites-available/example.com
<VirtualHost *:80>
  Include /etc/apache2/domains/example.com
</VirtualHost>

<VirtualHost 192.0.2.1:443>
  SSLEngine On
  SSLCertificateFile /etc/ssl/example.com_crt
  SSLCertificateKeyFile /etc/ssh/example.com_key

  Include /etc/apache2/domains/example.com
</VirtualHost>

# /etc/apache2/domains/example.com
ServerName example.com
ServerAlias www.example.com

ServerAdmin webmaster@example.com
DocumentRoot /home/example/public_html
ErrorLog /home/example/apache/error.log

क्या आप मुझे एक छोटा सा उदाहरण दे सकते हैं कि फाइल कैसी दिखनी चाहिए? क्या यह एक VirtualHost आवरण की आवश्यकता है, या मैं बस किसी भी आवरण के बिना इसे करने के लिए सभी लाइनों को स्थानांतरित करना चाहिए?
dar

1
मैंने अपने उत्तर में एक उदाहरण जोड़ा है।
Womble

1

जैसा कि मैंने stackoverflow ( /programming/679383/do-i-have-to-duplicate-the-virtualhost-directives-for-port-80-and3-443/52375167#) पर एक अलग प्रश्न पर उल्लेख किया है। 52375167 ):

उपयोग करने के बजाय एक अन्य विकल्प उपयोग कर रहा Includeहै Macro(ताकि आप इसे एक फ़ाइल में रख सकें)।

पहले मैक्रो मॉड्यूल सक्षम करें:

a2enmod macro

फिर अपने साझा किए गए सामान को एक मैक्रो में डालें और useयह आपके virtualhosts से:

<Macro SharedStuff>
   ServerName example.com
   ServerAdmin example@example.com
   <DocumentRoot /var/www/example>
      ...
   </DocumentRoot>
</Macro>

<VirtualHost *:80>
  Use SharedStuff
</VirtualHost>

<VirtualHost *:443>
  Use SharedStuff

  SSLEngine On
  SSLProtocol All -SSLv2 -SSLv3
  ...
</VirtualHost>

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

अधिक जानकारी के लिए यहां देखें:

https://httpd.apache.org/docs/2.4/mod/mod_macro.html


0

आप <Directory>किसी भी ब्लॉक के बाहर एक ब्लॉक में डायरेक्टरी सेटिंग्स डाल सकते हैं <VirtualHost>। यह उन्हें सभी वर्चुअल होस्ट पर लागू करेगा, लेकिन केवल निर्दिष्ट पथ के अंदर।

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