J'ai deux sites sur un serveur: dev.somedomain.com et somedomain.com - ce dernier a un ServerAlias de * .somedomain.com. Tous les domaines sont compatibles SSL, et toutes les demandes adressées au port 80 sont redirigées vers https. Le site somedomain.com est un proxy d'un ancien site, sur un serveur différent, sur le point d'être déconnecté.
dev.somedomain.com fonctionne à merveille
http://somedomain.com
est pour une raison quelconque "pris" par la configuration 000-default.conf (https n'est pas), mais http://www.somedomain.com
(le serveralias * .somedomain.com) n'est pas "pris" par 000-default .conf, et fonctionne comme prévu.
Si je désactive le fichier 000-default.conf, tout semble fonctionner, à l'exception de https://dev.somedomain.com/phpmyadmin (qui fonctionne avec 000-default activé - Je pense comprendre pourquoi )
J'ai cherché haut et bas, mais j'ai été incapable de comprendre cela.
somedomain.conf:
<VirtualHost *:80>
ServerName dev.somedomain.com
Redirect 301 / https://dev.somedomain.com
</VirtualHost>
<VirtualHost *:80>
ServerName somedomain.com
ServerAlias *.somedomain.com
Redirect 302 / https://somedomain.com/
</VirtualHost>
Et le 000-default.conf, qui semble casser somedomain.conf:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${Apache_LOG_DIR}/error.log
CustomLog ${Apache_LOG_DIR}/access.log combined
</VirtualHost>
somedomain-ssl.conf: (celui-ci ne semble pas avoir de problèmes, mais inclus ici pour en être sûr)
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName dev.somedomain.com
DocumentRoot "/var/www/somedomain/wwwroot"
Alias /phpmyadmin /usr/share/phpmyadmin
Alias /index.php /var/www/somedomain/index.php
Alias /import-data.php /var/www/somedomain/import.php
<Directory /var/www/somedomain/wwwroot>
Options FollowSymLinks
AllowOverride None
Require all granted
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA]
</Directory>
ErrorLog /var/www/somedomain/logs/error.log
CustomLog /var/www/somedomain/logs/access.log combined
ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/run/php/php7.0-fpm.sock|fcgi://localhost/var/www/somedomain/
SSLCertificateFile /etc/letsencrypt/live/dev.somedomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/dev.somedomain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-Apache.conf
</VirtualHost>
<VirtualHost *:443>
ServerName somedomain.com
<Location "/">
ProxyPreserveHost On
#anonymised IP to protect the guilty:
ProxyPass http://172.0.0.10/
ProxyPassReverse http://somedomain.com/
AddOutputFilterByType INFLATE;SUBSTITUTE;DEFLATE text/html
Substitute "s|http://somedomain.com/|/|iq"
SetOutputFilter DEFLATE
</Location>
SSLCertificateFile /etc/letsencrypt/live/dev.somedomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/dev.somedomain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-Apache.conf
</VirtualHost>
</IfModule>
Longue question: pourquoi http://somedomain.com
affiche-t-il la page par défaut d'Apaches, alors que http://www.somedomain.com
est - comme prévu - redirigé vers https://somedomain.com
?
Je suppose que la réponse est évidente et que je suis aveugle, mais je ne sais vraiment pas ce qui se passe.
Je vous remercie
EDIT
VirtualHost configuration:
*:443 is a NameVirtualHost
default server dev.somedomain.com (/etc/Apache2/sites-enabled/somedomain-ssl.conf:2)
port 443 namevhost dev.somedomain.com (/etc/Apache2/sites-enabled/somedomain-ssl.conf:2)
port 443 namevhost somedomain.com (/etc/Apache2/sites-enabled/somedomain-ssl.conf:35)
*:80 is a NameVirtualHost
default server somedomain.com (/etc/Apache2/sites-enabled/000-default.conf:1)
port 80 namevhost somedomain.com (/etc/Apache2/sites-enabled/000-default.conf:1)
port 80 namevhost dev.somedomain.com (/etc/Apache2/sites-enabled/somedomain.conf:1)
port 80 namevhost somedomain.com (/etc/Apache2/sites-enabled/somedomain.conf:7)
wild alias *.somedomain.com
Commencez d'abord par le résultat de la commande apachectl -S
. Il vous montre tous vos hôtes virtuels et les fichiers dont ils proviennent.
Le premier hôte virtuel répertorié dans la sortie est l'hôte virtuel par défaut. Je suppose que c'est celui de 000-default.conf. Si tel est le cas, cet hôte virtuel n'a pas de ServerName
et prendra donc celui du contexte global (serveur) ou du nom d'hôte de la machine. S'il s'agit de "somedomain.com", cela signifie que les demandes de ce domaine vont atterrir sur cet hôte virtuel. Si n'est pas le nous montrer la sortie de apachectl -S
pour aider à dépanner.
Explication: C'est simplement ainsi que fonctionnent les hôtes virtuels. Apachae essaie de faire correspondre le nom d'hôte utilisé (en réalité le contenu de l'en-tête HTTP 'Host') à n'importe quel ServerName
ou ServerAlias
et dès qu'il trouve une correspondance, l'hôte virtuel reçoit la demande. Si aucune correspondance n'est trouvée, le premier hôte virtuel répertorié est utilisé. Donc, si vous avez deux hôtes virtuels avec le même ServerName
, seul le premier test sera accessible avec ce nom.
Meilleure pratique: Donnez à chaque hôte virtuel un ServerName
pour vous assurer de savoir explicitement quelles requêtes vont atterrir sur chacune d'entre elles, et chaque fois que vous apportez une modification de configuration, exécutez apachectl -S