Apache2 mit SSL muss ich VirtualHost-Blöcke kopieren?

18

In Apache2 auf Ubuntu habe ich meine Website auf 80 zu hören, und jetzt möchte ich SSL hinzufügen. Gibt es eine Möglichkeit, die SSLEngine für Port 443 zu aktivieren, damit ich nicht den gesamten VirtualHost-Block kopieren muss?

Wenn ich das mache:

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

Es wird die SSLEngine für Port 80 eingeschaltet. Gibt es eine Möglichkeit, nur den einen VirtualHost-Block zu verwenden und nur die SSLEngine für Port 443 einzuschalten? Also kann ich so etwas machen?

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

Antworten:

14

Sie können nicht festlegen, dass ein Host sowohl HTTP als auch HTTPS ausführt, da es sich um separate Hosts handelt, die unterschiedliche Protokolle bedienen. Stattdessen sollten Sie die gesamte allgemeine Konfiguration in einer separaten Datei speichern und diese Datei dann in die SSL- und Nicht-SSL-vhosts für die Domäne aufnehmen.

Minimales Beispiel:

# /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 [email protected]
DocumentRoot /home/example/public_html
ErrorLog /home/example/apache/error.log
womble
quelle
Können Sie mir ein kurzes Beispiel geben, wie die Datei aussehen soll? Benötigt es einen VirtualHost-Wrapper oder sollte ich einfach alle Zeilen ohne Wrapper dorthin verschieben?
Dar
1
Ich habe meiner Antwort ein Beispiel hinzugefügt.
womble
1

Wie ich auf einer anderen Frage zum Stackoverflow erwähnt habe ( /programming/679383/do-i-have-to-duplicate-the-virtualhost-directives-for-port-80-and-443/52375167# 52375167 ):

Eine andere Option anstelle von "using" Includeist "using" Macro(damit Sie alles in einer Datei behalten können).

Aktivieren Sie zuerst das Makromodul:

a2enmod macro

Dann legen Sie Ihre geteilten Sachen in ein Makro und usees von Ihrem virtualhosts:

<Macro SharedStuff>
   ServerName example.com
   ServerAdmin [email protected]
   <DocumentRoot /var/www/example>
      ...
   </DocumentRoot>
</Macro>

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

<VirtualHost *:443>
  Use SharedStuff

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

Makros können auch Parameter annehmen und in anderen enthaltenen Dateien definiert werden. Sie können sie also ein bisschen wie Funktionen verwenden und eine Menge Duplikate in Ihren Apache-Konfigurationsdateien speichern.

Weitere Details finden Sie hier:

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

Seb
quelle
0

Sie können Verzeichniseinstellungen in einen <Directory>Block außerhalb von <VirtualHost>Blöcken einfügen. Dadurch werden sie auf alle virtuellen Hosts angewendet, jedoch nur auf den angegebenen Pfad.

DanMan
quelle