Apache2 avec SSL dois-je copier des blocs VirtualHost?

18

Dans Apache2 sur Ubuntu, mon site écoute sur 80, et maintenant je veux ajouter SSL. Existe-t-il un moyen d'activer le SSLEngine pour le port 443 afin que je n'aie pas à copier l'intégralité du bloc VirtualHost?

Quand je fais ça:

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

Il active le SSLEngine pour le port 80. Existe-t-il un moyen d'utiliser uniquement le bloc VirtualHost et de n'activer le SSLEngine que pour le port 443? Je peux donc faire quelque chose comme ça?

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

Réponses:

14

Vous ne pouvez pas faire qu'un vhost fasse à la fois HTTP et HTTPS, car ce sont des vhosts distincts desservant des protocoles distincts. Au lieu de cela, vous devez placer toute la configuration commune dans un fichier distinct, puis inclure ce fichier dans les vhosts SSL et non SSL du domaine.

Exemple minimal:

# /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
la source
Pouvez-vous me donner un bref exemple de l'apparence du fichier? A-t-il besoin d'un wrapper VirtualHost, ou dois-je simplement déplacer toutes les lignes vers lui sans aucun wrapper?
dar
1
J'ai ajouté un exemple à ma réponse.
womble
1

Comme je l'ai mentionné sur une autre question sur stackoverflow ( /programming/679383/do-i-have-to-duplicate-the-virtualhost-directives-for-port-80-and-443/52375167# 52375167 ):

Une autre option au lieu d'utiliser Includeest d'utiliser Macro(vous pouvez donc tout garder dans un seul fichier).

Activez d'abord le module macro:

a2enmod macro

Ensuite, mettez vos trucs partagés dans une macro et useà partir de vos hôtes virtuels:

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

Les macros peuvent également prendre des paramètres et être définies dans d'autres fichiers inclus; afin que vous puissiez les utiliser un peu comme les fonctions et économiser beaucoup de duplication dans vos fichiers de configuration Apache.

Voir ici pour plus de détails:

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

Seb
la source
0

Vous pouvez placer les paramètres de répertoire dans un <Directory>bloc en dehors de tout <VirtualHost>bloc. Cela les appliquera à tous les hôtes virtuels, mais uniquement à l'intérieur du chemin spécifié.

DanMan
la source