web-dev-qa-db-fra.com

différence entre _default _: * et *: * dans le contexte VirtualHost

Je veux connaître la différence entre " par défaut : *" et "*: *" dans le contexte VirtualHost.

<VirtualHost _default_:*>
  #...
  ServerName Host.example.com
  #...
</VirtualHost>

<VirtualHost *:*>
  #...
  ServerName Host.example.com
  #...
</VirtualHost>

Je ne connais pas la différence et le porpouse d'utilisation.

Thk

38
Luigi Giuseppe

La solution est sur la documentation Apache 2.2 sur la directive Virtualhost :

Syntaxe: ... (...) Addr peut être:

  • L'adresse IP de l'hôte virtuel;
  • Un nom de domaine complet pour l'adresse IP de l'hôte virtuel (non recommandé);
  • Le caractère * , qui est utilisé uniquement en combinaison avec NameVirtualHost * to correspondre à toutes les adresses IP; ou
  • La chaîne _default _ , qui est utilisée uniquement avec l'hébergement virtuel IP pour intercepter adresses IP inégalées.

Il existe deux façons de gérer les hôtes virtuels, l'hébergement virtuel basé sur le nom et l'hébergement virtuel basé sur IP.

Avec les hôtes virtuels nommés, vous disposez d'une liste d'hôtes virtuels, chacun gérant un ou plusieurs noms de domaine, et chacun associé à un couple listening IP:port. * est une valeur spéciale qui signifie toutes les IP sur cet hôte. Le virtualHost par défaut est le premier déclaré sur cette liste pour chaque adresse d'écoute donnée.

Avec les VirtualHosts basés sur IP, la directive ServerName du VirtualHost n'est pas utilisée, les informations importantes sont l'IP d'écoute (et le port), et le VirtualHost par défaut est le premier correspondant à l'IP traitant la demande entrante.

Donc, avec une configuration d'hébergement virtuel basée sur un nom:

  • <Virtualhost *:80> with ServerName foo.com signifie "sur toutes les adresses IP gérées sur cet hôte", "sur le port 80", "si l'en-tête de l'hôte de demande est foo.com" je vais utiliser cet hôte virtuel
  • <Virtualhost *:*> with Servername foo.com signifie "sur toutes les adresses IP gérées sur cet hôte", "sur tous les ports", "si l'en-tête de l'hôte de demande est foo.com" je vais utiliser cet hôte virtuel
  • <Virtualhost 10.0.0.2:*> with Servername foo.com signifie "pour les demandes entrantes de mon interface réseau 10.0.0.2", "sur tous les ports", "si l'en-tête de l'hôte de demande est foo.com" Je vais utiliser cet hôte virtuel
  • <Virtualhost _default_:*> with Servername foo.com: ne doit pas être utilisé avec l'hébergement virtuel basé sur le nom

Et sur un hébergement virtuel basé sur IP:

  • <Virtualhost 10.0.0.2:*> signifie "Je vais utiliser cet hôte virtuel pour les demandes provenant de mon interface 10.0.0.2"
  • <Virtualhost _default_:443> signifie "Je vais utiliser cet hôte virtuel pour toutes les autres interfaces réseau de mon hôte pour les demandes provenant du port 443"
  • <Virtualhost _default_:*> signifie "Je vais utiliser cet hôte virtuel pour toutes les autres interfaces réseau sur mon hôte, s'il ne correspond pas à une règle précédente et si l'en-tête de l'hôte de la demande ne correspond pas à un nom virtualhost basé "

Il s'agit donc de définir un Virtualhost fourre-tout. La documentation ajoute:

Lorsque vous utilisez un hébergement virtuel basé sur IP, le nom spécial _default_ peut être spécifié, auquel cas cet hôte virtuel correspondra à toute adresse IP qui n'est pas explicitement répertoriée dans un autre hôte virtuel. En l'absence de _default_ virtual Host la configuration du serveur "principal", constituée de toutes ces définitions en dehors de toute section VirtualHost, est utilisée lorsqu'aucune correspondance IP ne se produit. (Mais notez que toute adresse IP qui correspond à une directive NameVirtualHost n'utilisera ni la configuration de serveur "principale" ni le _default_ hôte virtuel. Voir la documentation de l'hébergement virtuel basé sur le nom pour plus de détails.)

Donc, après toutes ces choses, il devient assez "clair" que le mélange d'hébergement virtuel basé sur IP et basé sur le nom pourrait devenir un gâchis. Avec Apache 2.2 L'hébergement virtuel basé sur le nom était utilisé uniquement si NameVirtualhost <something> a été utilisé.

Mais avec la nouvelle version Apache 2.4 ces choses sont vraiment plus faciles à comprendre, pas de déclaration NameVirtualhost. La directive NameVirtualHost n'a plus d'effet que d'émettre un avertissement. Toute combinaison adresse/port apparaissant dans plusieurs hôtes virtuels est implicitement traitée comme un hôte virtuel basé sur le nom . Plus de complexité, même la documentation est désormais plus simple:

  • Le caractère *, qui agit comme un caractère générique et correspond à n'importe quelle adresse IP.
  • La chaîne _default_, qui est un alias pour *

Donc, avec Apache 2.4, la réponse est: c'est la même chose.

44
regilero

_default_ vhosts pour tous les ports

Attraper chaque demande vers n'importe quelle adresse IP et port non spécifié, c'est-à-dire une combinaison adresse/port qui n'est utilisée pour aucun autre hôte virtuel.

http://httpd.Apache.org/docs/2.2/vhosts/examples.html#default

0
Jacek Lakomiec