Puis-je définir HTTP et HTTPS dans le même VirtualHost dans Apache conf?

13

J'ai une assez grande définition de VirtualHost que je ne veux pas dupliquer juste pour que le site fonctionne également sur HTTPS.

Voici ce que je veux faire:

<VirtualHost *>
    ServerName example.com

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

    (other config)

</VirtualHost>

Y a-t-il un moyen de le faire?
Suis-je en train de manquer une autre méthode pour ne pas dupliquer la configuration?

Jake
la source

Réponses:

12

La version stable actuelle d'Apache (2.2) n'a pas cette fonctionnalité, mais la 2.4 a la directive IF .

Vous devez créer deux VirtualHosts pour l'instant, mais vous pouvez définir des éléments via des variables globales d'environnement ou apache et les utiliser dans votre configuration de virtualhost (en définissant par exemple le documentroot). De cette façon, si vous voulez changer, vous pouvez le faire avec une seule ligne de modification.

Bien sûr, vous pouvez utiliser include pour faire quelque chose comme ceci:

<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 sera le courant dominant des années avant l'adaptation IPv6. Tous les navigateurs traditionnels le prennent en charge en supposant déjà que vous utilisez un système d'exploitation pris en charge.

edit: comme fooquency repéré, vous ne pouvez pas mettre SSLEngine On sur un bloc If, donc ma réponse est fausse.

Tyrael
la source
8
Tenter de mettre SSLEngine Onun <If>testament donnera SSLEngine not allowed here, donc le cas d'utilisation suggéré au début de cette réponse ne semble malheureusement pas possible. Cela semble être dû au fait que «seules les directives qui prennent en charge le contexte de répertoire peuvent être utilisées dans cette section de configuration». (ref) et SSLEngineest server config, virtual host (ref) , pas un répertoire.
fooquency
3

Non. Vous pouvez déplacer la plupart des éléments vers la configuration globale et en hériter dans VirtualHost.

Chris S
la source
1
Malheureusement, j'ai quelques VirtualHosts, chacun avec une configuration différente et la plupart ayant besoin de travailler sur HTTP et HTTPS.
Jake
1
Aussi inutile que cette réponse soit, c'est la seule correcte. Veuillez passer à un serveur Web qui ne craint pas. :)
intégré
3

Cela a été répondu dans une autre question. Utilisez une instruction Include. A fonctionné à merveille pour moi:

Servir http (port 80) et https (port 443) sur le même VirtualHost

# Acme Co
<VirtualHost 192.168.56.101:80>
        Include /usr/local/apache2/conf/main-acme.conf
</VirtualHost>

###* SSL
<VirtualHost 192.168.56.101:443>
        Include /usr/local/apache2/conf/main-acme.conf
        SSLEngine On
</VirtualHost>
Kevin Parker
la source
2

Pour les hôtes virtuels SSL, vous devez soit utiliser un deuxième port ala

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

ou vous devez utiliser des adresses IP distinctes

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

Il y a en fait une très bonne explication dans les documents SSL Apache http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html

Rechercher "Pourquoi ne puis-je pas utiliser SSL avec des hôtes virtuels basés sur le nom / non basés sur IP?"

Paul S
la source
2
Soyez conscient de cela pour l'avenir, cependant: en.wikipedia.org/wiki/Server_Name_Indication
mattdm
Ironiquement, au moment où SNI est suffisamment largement accepté pour être utilisé en toute sécurité pour la majorité des sites d'hébergement virtuels, IPv6 sera probablement suffisamment banal pour le rendre hors de propos.
jgoldschrafe
4
@jgoldschrafe Salut 2010, c'est l'avenir qui parle ici! Caniuse récent montre que les navigateurs non SNI sont <2% dans le monde. Du premier monde, c'est probablement beaucoup moins. IPv4 toujours bien vivant :)
kubanczyk
2
@kubanczyk m'a eu! :)
jgoldschrafe
@jgoldschrafe Même avec IPv6, je préfèrerais toujours que SNI attribue des blocs d'adresses à une seule machine, car les IP sont principalement destinées au routage et il est plus facile à gérer de cette façon.
Bachsau