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 des domaines non répertoriés? Par exemple, si j'avais:
<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 dirigez vers mon serveur, il affichera par défaut la même chose que domain3. Est-ce possible?
apache-2.2
virtualhost
SJaguar13
la source
la source
Lorsque vous utilisez des hôtes virtuels nommés, la première configuration d’hôte virtuel chargée sera la configuration par défaut (Source: Apache Wiki ). Par exemple, avec la configuration ci-dessous, sinon les domaines non appariés correspondront à
domain-one.com
:De nombreux serveurs ne possèdent pas de fichier de configuration monolithique, mais plusieurs fichiers de configuration spécifiques à l'hôte, organisés comme suit:
Dans ce cas, pour charger en premier une configuration particulière de l'hôte virtuel, renommez le lien symbolique en quelque chose qui sera premier lorsqu'il sera trié, tel que
00-default
.Certaines des autres réponses ne sont pas tout à fait correctes. Selon le wiki Apache, ne pas définir un
ServerName
hôte virtuel est incorrect. Si l'hôte sans aServerName
n'est pas chargé en premier, Apache pourrait même ne jamais l'utiliser, car le premier hôte chargé serait celui par défaut.En outre,
ServerAlias *
bien qu’il corresponde à tout, il peut également remplacer d’autres hôtes virtuels définis ultérieurement. Peut-être que cette approche fonctionnerait si c'était toujours le dernier hôte virtuel à être défini (comme dans la configuration donnée dans la question), mais cela impliquerait d'ajouter une nouvelle directive et de changer l'ordre de tri au lieu de changer simplement l'ordre comme ci-dessus.la source
httpd-vhosts.conf
Ne spécifiez pas un nom de serveur, et cela deviendra votre vhost par défaut.
Assurez-vous également que vous n'avez pas spécifié DocumentRoot dans le fichier principal httpd.conf, car cela aura priorité sur les hôtes virtuels.
la source
L'ordre est important - déplacez votre définition vhost pour tout le reste en tête de liste.
la source
Utilisez l'hôte virtuel _default_ et placez-le d'abord dans httpd-vhosts.conf, comme indiqué dans http://httpd.apache.org/docs/2.2/vhosts/examples.html.
"Catching chaque demande à n'importe quelle adresse IP et port non spécifiés, c.-à-d., Une combinaison adresse / port qui n'est pas utilisée pour tout autre hôte virtuel [...] Un hôte par défaut ne sert jamais une demande qui a été envoyée à une adresse / port qui est utilisé pour les hôtes virtuels basés sur le nom. Si la demande contient un en-tête Host: inconnu ou inexistant, elle est toujours servie à partir de l'hôte virtuel basé sur le nom (l'hôte virtuel de cette adresse / de ce port apparaissant en premier dans le fichier de configuration). "
Extrait d'un httpd-vhosts.conf en direct mais obfusqué qui verrouille tous les vhosts sur le port 80:
Vous trouverez une explication détaillée du processus de correspondance vhost à l’ adresse suivante : http://httpd.apache.org/docs/2.2/vhosts/details.html
la source
_default_
est utilisé uniquement pour les adresses IP qui ne correspondent pas . Ainsi, lorsque vhost est un caractère générique (*: 80), il ne sera jamais utilisé.Les caractères génériques incluent les fichiers de configuration de votre site:
Organisez les fichiers de configuration de votre site afin qu'ils soient chargés dans un ordre attendu. Exemple...
01-httpd.conf
02-site1-httpd.conf
03-site2-httpd.conf
etc...
Apache les lira dans l'ordre. Ensuite, créez-en un qui se chargera toujours en dernier pour capturer tous les hôtes virtuels sans correspondance et renverra un 404 au lieu de charger un site par défaut.
99-catchall-httpd.conf
Assurez-vous de remplacer les ports par ceux que votre httpd écoute. Ou si vous avez httpd à l'écoute sur des interfaces spécifiques, vous devrez plutôt ajouter un fourre-tout à chaque interface, comme ceci:
J'espère que cela t'aides. J'utilise cette méthode pour charger des sites dans l'ordre spécifié et empêcher que des hôtes virtuels sans correspondance ne chargent par inadvertance un site inattendu.
la source
La meilleure solution consiste à renommer le fichier de configuration du site en commençant par "1" afin qu'il se charge en premier et qu'il s'agisse de votre site par défaut.
Apache2 fait du premier fichier vhost chargé la page par défaut.
la source
000-default
un hôte virtuel pour cette raison.lorsque vous utilisez
<VirtualHost *:port>
et spécifiez ServerName / ServerAlias pour les hôtes qui vous intéressent, c’est ce que je devais faire.Un peu de contexte dans ma situation:
J'ai une adresse IP dynamique de mon fournisseur de services Internet; mon adresse IP est donc enregistrée auprès d'une société d'enregistrement d'adresses IP dynamiques (noip.org dans mon cas). Un de mes "hôtes" devait être enregistré lors de mon 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 se rendent sur site1 et host2.ddns.net sur le site 2 et que tout le reste, y compris mon adresse IP, passe par défaut.
La première lecture de fichier de configuration sera la valeur par défaut, à savoir
000_def.conf
,001_site1.conf
,002_site2.conf
sera lu dans cet ordre avec000_def.conf
comme site par défaut. (note: dans mon cas, j'ai ces "fichiers" dans/etc/apache2/sites-enabled
lesquels se trouvent des liens dynamiques vers le fichier de conf en/etc/apache2/sites-available
)Etant donné que ServerName est utilisé dans 001_site1.conf et 002_site2.conf, il doit également être défini sur quelque chose dans 000_def.conf.
la source