web-dev-qa-db-fra.com

Comment puis-je forcer un VirtualHost dans Apache à ne pas écouter les sous-domaines non définis sur 443?

Dans /etc/Apache2/sites-available/example.com:

<VirtualHost *:443>
        ServerName www.example.com
        DocumentRoot /var/www/example.com/htdocs
        SSLEngine on
        SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
        SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
</VirtualHost>

J'ai également un hôte virtuel configuré pour foo.example.com, mais qui n'écoute que sur le port 80.

J'ai l'enregistrement A pour foo.example.com pointant sur ce même serveur. Si je visite https://foo.example.com dans mon navigateur, il charge l'hôte virtuel pour www.example.com. Comment puis-je combattre cela?

3
Charlie Schliesser

Cela est dû au fait que vous n'avez pas configuré SSL pour le sous-domaine foo.example.com et qu'il utilise donc le domaine www.. Si vous ne souhaitez pas utiliser SSL, vous pouvez simplement supprimer l'hôte virtuel qui s'exécute sur le port 443, sinon, ajoutez simplement à la configuration les éléments suivants:

Permet à foo.example.com de fonctionner sur SSL

<VirtualHost *:443>
        ServerName foo.example.com
        DocumentRoot /var/www/foo.example.com/htdocs
        SSLEngine on
        SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
        SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
</VirtualHost>

Rediriger HTTPS vers HTTP

<VirtualHost *:443>
        ServerName foo.example.com
        RewriteEngine on
        RewriteCond %{HTTP_Host} ^foo.example.com
        RewriteRule ^/(.*)$ http://foo.example.com/$1 [L,R=301]
        DocumentRoot /var/www/foo.example.com/htdocs
        SSLEngine on
        SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
        SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
</VirtualHost>

Ou si vous voulez une erreur 404 utilisez alors:

<VirtualHost *:443>
        ServerName foo.example.com
        RewriteEngine on
        Redirect 404 /
        ErrorDocument 404 "Page Not Found"
        DocumentRoot /var/www/foo.example.com/htdocs
        SSLEngine on
        SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
        SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
</VirtualHost>
2
Simon Hayter