उसी VirtualHost पर http (पोर्ट 80) और https (पोर्ट 443) परोसें


29

मुझे अपना VirtualHost अपाचे पर http और https (मानक बंदरगाहों का उपयोग करके) दोनों पर सेट करने की आवश्यकता है

अगर मैं SSL इंजन को सक्षम करता हूं (नीचे के अनुसार) - मुझे पोर्ट 80 पर एक त्रुटि मिलती है।

इसका कारण है, साइट के कुछ हिस्सों का एसएसएल होना ज़रूरी है लेकिन अन्य हिस्से नहीं हैं। मैं साइट पर http + https दोनों की सेवा के बारे में कैसे जा सकता हूं?

यहाँ मेरी वर्चुअल होस्ट फ़ाइल है ...।

NameVirtualHost *

<VirtualHost *>
        ServerAdmin webmaster@localhost
        ServerName mysite.co.uk
        DocumentRoot /var/www/mysite/public
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/mysite/public>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /var/log/apache2/access.log combined
        ServerSignature On

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

     #SSL STUFF...
      SSLEngine on
      SSLCertificateFile /etc/apache2/crts/mysite.crt
      SSLCertificateKeyFile /etc/apache2/crts/mysite.key
      SSLCertificateChainFile /etc/apache2/crts/DigiCertCA.crt


</VirtualHost>

जवाबों:


44

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

जिस तरह से मैं अपाचे में इसे प्रबंधित करता हूं वह मेरे सभी गैर-एसएसएल-संबंधित कॉन्फ़िगरेशन को एक अलग फ़ाइल में डालने के लिए है, और फिर दो vhosts को एक-दूसरे के बगल में कॉन्फ़िगर किया गया है, प्रत्येक में vhost stanza के अंदर साइट-विशिष्ट कॉन्फ़िगरेशन फ़ाइल शामिल है, जैसे :

<VirtualHost 192.0.2.12:80>
    Include /etc/apache2/sites/example.com
</VirtualHost>

<VirtualHost 192.0.2.12:443>
    SSLEngine On
    # etc
    Include /etc/apache2/sites/example.com
</VirtualHost>

7

यह अपाचे vHost में एक मुद्दे की तरह लगता है, लेकिन यह कॉन्फ़िगरेशन को दोहराए बिना काम करता है।

SSLCertificateFile /srv/.ssl/self/server.crt
SSLCertificateKeyFile /srv/.ssl/self/server.pem

# REQUIRED
<VirtualHost *:80>
    DocumentRoot /srv/www/badhost
</VirtualHost>

<VirtualHost *:80 *:443>
    SSLEngine On
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /srv/www/example.www
</VirtualHost>

यह वास्तव में अजीब है, लेकिन मौजूद है!
user77376

1
यह काम किया है और साथ ही आप इस तरह के कीचड़ से उम्मीद कर सकते हैं - लगभग, लेकिन काफी नहीं! मैंने पाया कि अपाचे 2.4.10 पोर्ट के उपयोग के बजाय SERVER_PORT पर्यावरण चर को 443 पर सेट करता है, जिस पर अनुरोध आया (80 या 443 निर्भर करता है)। <IMAGINARY_PARAGRAPH_BREAK> दया, जैसा कि मैं इस का उपयोग करने में सक्षम होने की उम्मीद कर रहा था, क्योंकि मैं वास्तव में एक फ़ाइल प्रति वर्चुअल होस्ट रखना चाहता था। <IMAGINARY_PARAGRAPH_BREAK> इसके अलावा, आपको शीर्ष के अंदर एक ServerName निर्देश की आवश्यकता होगी <VirtualHost> अन्यथा यह गलती से अनुरोधों को तोड़ देगा। इसे ServerName badhost.bad या कुछ और पर सेट करें।
डैनियल बेयर्समोर

1
@DanielBeardsmore: मैंने इसे आरएच सॉफ्टवेयर संग्रह से 2.4.18 के साथ परीक्षण किया है, और यह डिफ़ॉल्ट रूप से होने के कारण लगता है UseCanonicalPhysicalPort Off। यदि आप उस पर सेट करते हैं, तो आप वास्तविक पोर्ट का उपयोग करने लगते हैं। (पर्याप्त रूप से, मुझे SSLEngine Onअपने दोहरे उपयोग वाले वेस्ट में छोड़ना पड़ा और डिफ़ॉल्ट के रूप में 80 पोर्ट मिला।)
उलरिच श्वार्ज़

1
@DanielBeardsmore: FWIW, %{HTTPS}को भी सही ढंग से सेट किया जाएगा, लेकिन %{REQUEST_SCHEME}(हमेशा http) नहीं है। मैं एक UseCanonicalRequestSchemeनिर्देश के लिए एक सुविधा अनुरोध में मूर्खतापूर्ण महसूस कर रहा हूँ , यद्यपि।
उलरिच श्वार्ज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.