SSL ile Apache2 VirtualHost bloklarını kopyalamak zorunda mıyım?


18

Ubuntu'da Apache2'de sitemi 80'de dinliyorum ve şimdi SSL eklemek istiyorum. Tüm VirtualHost bloğunu kopyalamak zorunda değilim bu yüzden port 443 için SSLEngine etkinleştirmek için bir yolu var mı?

Bunu yaptığımda:

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

80 numaralı bağlantı noktası için SSLEngine'i açıyor. Yalnızca bir VirtualHost bloğunu kullanmanın ve 443 numaralı bağlantı noktası için yalnızca SSLEngine'i açmanın bir yolu var mı? Yani böyle bir şey yapabilir miyim?

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>

Yanıtlar:


14

Bir vhost'un hem HTTP hem de HTTPS yapmasını sağlayamazsınız, çünkü bunlar ayrı protokollere hizmet eden ayrı vhostlardır. Bunun yerine, tüm ortak yapılandırmayı ayrı bir dosyaya koymalı ve ardından bu dosyayı etki alanının hem SSL hem de SSL olmayan vhost'larına eklemelisiniz.

Minimal örnek:

# /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

Dosyanın nasıl olması gerektiğine dair kısa bir örnek verebilir misiniz? Bir VirtualHost sarıcıya mı ihtiyacı var, yoksa sadece herhangi bir sargı olmadan tüm hatları taşımalıyım?
dar

1
Cevabıma bir örnek ekledim.
womble

1

Stackoverflow hakkında farklı bir soruda belirttiğim gibi ( /programming/679383/do-i-have-to-duplicate-the-virtualhost-directives-for-port-80-and-443/52375167# 52375167 ):

Kullanmak yerine başka bir seçenek Includekullanmaktır Macro(böylece hepsini tek bir dosyada tutabilirsiniz).

İlk olarak makro modülünü etkinleştirin:

a2enmod macro

Ardından paylaşılan öğelerinizi bir makroya ve usesanal ana bilgisayarlarınızdan ekleyin:

<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>

Makrolar ayrıca parametre alabilir ve dahil edilen diğer dosyalarda tanımlanabilir; böylece bunları İşlevler gibi kullanabilir ve Apache yapılandırma dosyalarınızda çok fazla çoğaltma kaydedebilirsiniz.

Daha fazla ayrıntı için buraya bakın:

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


0

Dizin ayarlarını <Directory>herhangi bir bloğun dışındaki bir bloğa koyabilirsiniz <VirtualHost>. Bu, onları tüm sanal ana bilgisayarlara uygular, ancak yalnızca belirtilen yolun içine uygular.

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.