Aynı VirtualHost'ta http (80 numaralı bağlantı noktası) ve https (443 numaralı bağlantı noktası) servisini yapın


29

VirtualHost'umu Apache'de hem http hem de https'de (standart portları kullanarak) sunacak şekilde kurmam gerekiyor

SSL Motorunu etkinleştirirsem (aşağıda belirtildiği gibi) - 80 numaralı bağlantı noktasında bir hata alıyorum.

Bunun nedeni, sitenin bazı bölümlerinin SSL olması gerektiği, ancak diğer bölümlerin gerekmediğidir. Her iki http + https’de siteye nasıl girebilirim?

İşte sanal host dosyam ....

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>

Yanıtlar:


44

Bunu bir sanal ana bilgisayarda yapamazsınız, çünkü Apache hangisinin SSL konuşacağını ve hangisinin konuşmayacağını bilmek zorundadır (sidenote: nginx'in bu sorunu yoktur), hangi dinleme direktiflerinin SSL ile ilgili olduğunu söyleyebilirsiniz; onu sevdiğim birçok nedenden biri).

Bunu Apache'de yönetme yöntemim, SSL ile ilgili olmayan tüm konfigürasyonumu ayrı bir dosyaya koymak ve sonra birbirlerinin yanında yapılandırılmış iki vhost'a sahip olmak ve her biri vhost stanza içindeki siteye özgü konfigürasyon dosyası dahil, bunun gibi :

<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

Apache vHost'ta bir sorun gibi görünüyor, ancak yapılandırmayı tekrarlamak zorunda kalmadan işi yapıyor.

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>

Bu gerçekten garip, ama var!
user77376

1
Bu, böyle bir çamurdan bekleyebileceğiniz gibi çalıştı - neredeyse, ama tam olarak değil! Apache 2.4.10'un SERVER_PORT ortam değişkenini isteğin geldiği bağlantı noktasını kullanmak yerine 443 olarak ayarladığını gördüm (bağlı olarak 80 veya 443). <IMAGINARY_PARAGRAPH_BREAK> Sanal konak başına bir dosya tutmak istediğim için, bunu kullanabileceğimi umduğum için yazık. <IMAGINARY_PARAGRAPH_BREAK> Ayrıca, <VirtualHost> üstündeki bir SunucuAdı yönergesine ihtiyacınız olacak, aksi halde yanlışlıkla istekleri azaltacaktır. SunucuAdı badhost.bad veya başka bir şey için ayarlayın.
Daniel Beardsmore

1
@DanielBeardsmore: Bunu sadece RH Yazılım koleksiyonlarından 2.4.18 ile test ettim ve bunun varsayılan olması gibi görünüyor UseCanonicalPhysicalPort Off. Bunu açık olarak ayarlarsanız, kullanılan asıl bağlantı noktasını görüyorsunuz. (Yeterince komik, SSLEngine Oniki kez kullanılmış vhost'umdan ayrılmak zorunda kaldım ve varsayılan olarak 80 numaralı bağlantı noktasını aldım.)
Ulrich Schwarz

1
@DanielBeardsmore: FWIW, %{HTTPS}ayrıca doğru ayarlanacaktır, ancak %{REQUEST_SCHEME}(her zaman http) değildir . UseCanonicalRequestSchemeOlsa da, bir yönerge için bir özellik isteği koyarak aptal hissediyorum .
Ulrich Schwarz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.