Apache conf'de aynı VirtualHost'ta HTTP ve HTTPS tanımlayabilir miyim?


13

Ben sadece site de HTTPS üzerinden çalışacak şekilde çoğaltmak istemiyorum oldukça büyük bir VirtualHost tanımı var.

İşte yapmak istediğim şey:

<VirtualHost *>
    ServerName example.com

    <If port=443>
        SSLEngine on
        SSLCertificateFile ...
        SSLCertificateKeyFile ...
        SSLCertificateChainFile ...
    </If>

    (other config)

</VirtualHost>

Bunu yapmanın bir yolu var mı?
Yapılandırmayı çoğaltmamak için başka bir yöntem eksik mi?

Yanıtlar:


12

Apache'nin (2.2) şu anki kararlı sürümü bu özelliğe sahip değildir, ancak 2.4'ün IF yönergesi vardır .

Şimdilik iki VirtualHost oluşturmanız gerekiyor, ancak ortam veya apache global değişkenleri aracılığıyla bazı şeyler ayarlayabilir ve bunu sanal ana bilgisayar yapılandırmanızda kullanabilirsiniz (örneğin, belge kökünü ayarlama). Bu şekilde değiştirmek isterseniz, bunu tek bir değişiklik satırıyla yapabilirsiniz.

Tabii ki, böyle bir şey yapmak için include kullanabilirsiniz:

<VirtualHost *:80>
        include /etc/apache2/vhost.conf.d/site1
</VirtualHost>

<VirtualHost *:443>
        include /etc/apache2/vhost.conf.d/site1
        include /etc/apache2/vhost.conf.d/site1-ssl
</VirtualHost>

ps: SNI , IPv6 adaptasyonundan yıllar önce ana akım olacak . Tüm ana tarayıcı, desteklenen bir işletim sisteminde olduğunuzu varsayarak destekliyor.

edit: fooquency benekli SSLEngine bir If bloğuna koyamazsınız, bu yüzden cevabım yanlış.


8
Koymak için çalışılıyor SSLEngine Onbir in <If>verecek SSLEngine not allowed herebu cevabın başında önerilen kullanım durum ne yazık ki mümkün görünmemektedir yüzden. Bunun nedeni, "Bu yapılandırma bölümünde yalnızca dizin içeriğini destekleyen yönergeler kullanılabilmesi" gerekliliğinden kaynaklanıyor olabilir. (ref) ve dizin değil SSLEngine, server config, virtual host (ref) 'dir .
fooquency

3

Hayır. Çoğu şeyi Global yapılandırmaya taşıyabilir ve VirtualHost'ta devralabilirsiniz.


1
Ne yazık ki her biri farklı yapılandırma ve HTTP ve HTTPS üzerinde çalışmak için gereken birkaç VirtualHosts var.
Jake

1
Bu cevap kadar yararsızdır, tek doğru cevap budur. Lütfen emmeyen bir web sunucusuna geçin. :)
intgr


2

SSL sanal ana bilgisayarları için, ya ikinci bir bağlantı noktası ala kullanmanız gerekir

<VirtualHost *:443>
    ServerName abc.com
</VirtualHost>
<VirtualHost *:4443>
    Servername def.com
</VirtualHost>

veya ayrı IP'ler kullanmanız gerekir

<VirtualHost 192.168.0.1:443>
    ServerName abc.com
</VirtualHost>
<VirtualHost 192.168.0.2:443>
    Servername def.com
</VirtualHost>

Apache SSL belgelerinde çok iyi bir açıklama var http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html

"SSL'yi neden ad tabanlı / IP tabanlı olmayan sanal ana bilgisayarlarla kullanamıyorum?"


2
Gelecek için bunun farkında olun: en.wikipedia.org/wiki/Server_Name_Indication
mattdm

İronik bir şekilde, SNI, sanal barındırma sitelerinin çoğunda güvenle kullanılacak kadar yaygın olarak kabul edildiğinde, IPv6 muhtemelen alakasız hale gelecek kadar yaygın olacaktır.
jgoldschrafe

4
@jgoldschrafe Merhaba 2010, gelecekteki burada konuşmak! Son caniuse , SNI olmayan tarayıcıların dünya çapında <% 2 olduğunu gösteriyor. İlk dünyadan muhtemelen çok daha az. IPv4 hala hayatta ve iyi :)
kubanczyk

2
@kubanczyk Anladım! :)
jgoldschrafe

@jgoldschrafe IPv6 ile bile, IP'ler esas olarak yönlendirme için olduğundan ve bu şekilde yönetilmesi daha kolay olduğundan, SNI'yı tek bir makineye adres blokları atama konusunda hala tercih ederim.
Bachsau
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.