73 votes

Apache Default/Catch-All Virtual Host ?

Si j'ai 3 domaines, domain1.com, domain2.com et domain3.com, est-il possible de configurer un hôte virtuel par défaut pour les domaines non répertoriés ? Par exemple, si j'ai :

<VirtualHost 192.168.1.2 204.255.176.199>
DocumentRoot /www/docs/domain1
ServerName domain1
ServerAlias host
</VirtualHost>

<VirtualHost 192.168.1.2 204.255.176.199>
DocumentRoot /www/docs/domain2
ServerName domain2
ServerAlias host
</VirtualHost>

<VirtualHost 192.168.1.2 204.255.176.199>
DocumentRoot /www/docs/everythingelse
ServerName *
ServerAlias host
</VirtualHost>

Si vous enregistrez un domaine et que vous le faites pointer vers mon serveur, tout le reste affichera par défaut la même chose que le domaine 3. Cela est-il possible ?

2voto

Jason Slobotski Points 121

Wildcard inclut les fichiers de configuration de votre site :

Include path/to/site/confs/*httpd.conf

Organisez les fichiers conf de votre site pour qu'ils soient chargés dans l'ordre prévu. Exemple...

01-httpd.conf

02-site1-httpd.conf

03-site2-httpd.conf

etc...

Apache va les lire dans l'ordre. Ensuite, créez-en un qui se chargera toujours en dernier pour attraper les hôtes virtuels qui ne correspondent pas et retournera un 404 au lieu de charger un site par défaut.

99-catchall-httpd.conf

<VirtualHost *:8080>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

<VirtualHost *:8443>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

Assurez-vous de remplacer les ports par les ports sur lesquels votre httpd écoute. Si vous avez httpd qui écoute sur des interfaces spécifiques, vous devrez ajouter un "catchall" pour chaque interface, comme ceci :

<VirtualHost 192.168.1.101:8080>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>
<VirtualHost 192.168.1.101:8443>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

<VirtualHost 192.168.1.102:8080>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

<VirtualHost 192.168.1.102:8443>
 ServerName null
 ServerAlias *
 Redirect 404 /
</VirtualHost>

J'espère que cela vous aidera. J'utilise cette méthode pour charger les sites dans l'ordre que je spécifie et empêcher les hôtes virtuels non appariés de charger involontairement un site inattendu.

0voto

xoompa Points 11

La meilleure solution est de renommer le fichier de configuration du site en commençant par un "1" afin qu'il soit chargé en premier et qu'il devienne votre site par défaut.

Apache2 fait du premier fichier vhost chargé la page par défaut.

0 votes

L'installation par défaut d'apache a également 000-default virtuel pour cette raison.

0voto

alan Points 1

Lors de l'utilisation de <VirtualHost *:port> et en spécifiant ServerName/ServerAlias pour les hôtes qui vous intéressent, ce qui est ce que je devais faire.

Un peu de contexte dans ma situation :

J'ai une adresse IP dynamique fournie par mon fournisseur d'accès à Internet et mon adresse IP est enregistrée auprès d'une société d'enregistrement d'adresses IP dynamiques (noip.org dans mon cas). L'un de mes "hôtes" devait être enregistré auprès de ma société d'enregistrement DNS en tant que myabc.example.com en tant que CNAME qui pointe vers host1.ddns.net. Mais host2.ddns.net a été laissé tel quel. Je voulais que myabc.example.com et host1.ddns.net aillent vers le site 1 et host2.ddns.net vers le site 2 et que tout le reste, y compris mon adresse IP, aille vers le site par défaut.

Le premier fichier de conf lu sera celui par défaut, c'est à dire 000_def.conf , 001_site1.conf , 002_site2.conf sera lu dans cet ordre avec 000_def.conf comme site par défaut. (note : dans mon cas, j'ai ces "fichiers" dans le répertoire /etc/apache2/sites-enabled qui sont en fait des liens dynamiques vers le fichier de conf actuel dans /etc/apache2/sites-available )

Parce que ServerName est utilisé dans 001_site1.conf et 002_site2.conf, il doit également être défini comme quelque chose dans 000_def.conf.

# 000_def.conf:
<VirtualHost *:80>  
ServerName null
# NOTE: DO NOT USE "ServerAlias *" this seems to override the other conf files.
</VirtualHost>

# 001_site1.conf
<VirtualHost *:80>  
ServerName myabc.example.com
ServerAlias mylocalhostname host1.ddns.net
</VirtualHost>

# 002_site2.conf:
<VirtualHost *:80>  
ServerName host2.ddns.net
</VirtualHost>

0voto

fbitterlich Points 101

En plus des réponses données ici (notamment celle de @Jason Blevins), il y a un piège potentiel ici. Il m'a fallu un certain temps pour le découvrir.

Comme indiqué, Apache utilisera l'option premièrement VirtualHost si aucune autre entrée ne correspond à l'un ou l'autre des critères suivants HostName ou HostAlias directive.

Cependant, faites attention lorsque vous mélangez des hôtes virtuels qui sont liés à une adresse IP spécifique et d'autres qui ne le sont pas ( <VirtualHost 192.168.1.1:80> vs. <VirtualHost *:80> ).

Si une demande est faite à une adresse IP qui a un ou plusieurs hôtes virtuels liés à l'IP, elle utilisera la première entrée VirtualHost. lié à cette adresse même si c'est pas le premier . En d'autres termes, les correspondances plus spécifiques sont préférées à celles qui ne le sont pas pour la correspondance d'adresse IP, également.

Exemple

<VirtualHost *>
DocumentRoot /www/docs/domain1
ServerName host1.exmple.com
ServerAlias host
</VirtualHost>

<VirtualHost 192.168.1.1>
DocumentRoot /www/docs/domain2
ServerName host2.exmple.com
ServerAlias host
</VirtualHost>

Si une demande est faite à l'hôte foobar.example.com et qui se résout à 192.168.1.1, Apache servira à partir de /www/docs/domaine2, ce qui peut être inattendu.

Pour résoudre ce problème, soit...

  • rendre tous les hôtes virtuels indépendants de l'IP ( <VirtualHost *> ), ou
  • ajouter une entrée VirtualHost par défaut distincte pour chaque adresse IP desservie.

En cas de doute, lancez apachectl -S (ou toute autre commande appropriée sur votre système) pour obtenir une liste de VirtualHosts. Elle vous indiquera celui qui est utilisé par défaut.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X