web-dev-qa-db-fra.com

Comment fonctionnent ServerName et ServerAlias?

C'est la partie suivante d'une configuration d'hôte virtuel sur laquelle j'ai besoin de précisions:

<VirtualHost *:80>
  # Admin email, Server Name (domain name), and any aliases
  ServerAdmin [email protected]
  ServerName  141.29.495.999
  ServerAlias example.com
...

Ceci est un exemple de configuration, similaire à ce que j'ai actuellement (je n'ai pas de nom de domaine pour le moment).

<VirtualHost *:80> - Autorisez les paramètres suivants pour toutes les requêtes HTTP effectuées sur le port 80 aux adresses IP sur lesquelles ce serveur peut être contacté. Par exemple, si le serveur est accessible sur plusieurs adresses IP, vous pouvez limiter cette directive à une seule au lieu des deux.

ServerName - Si la partie hôte de la demande HTTP correspond à ce nom, autorisez la demande. Normalement, ce serait un nom de domaine mappé à une IP, mais dans ce cas, l'hôte de requête HTTP doit correspondre à cette IP.

ServerAlias - Noms alternatifs acceptés par le serveur.

La partie déroutante pour moi est, dans le scénario ci-dessus, si je mets ServerAlias mytestname.com puis a fait une demande HTTP à mytestname.com, il devrait y avoir un enregistrement DNS pointant vers l'IP du serveur pour que cela fonctionne? Dans ce cas, ServerAlias ​​est-il essentiellement des entrées EXTRA ServerName?

Supposons que j'avais une entrée DNS telle que foobar.com = 141.29.495.999 mais alors j'avais ServerName = 141.29.495.999 et ServerAlias étaient vides, cela signifierait-il que bien que foobar.com soit résolu sur la bonne IP, car il n'y a aucune référence pour accepter foobar.com dans ServerName ou ServerAlias?

Ou quelque chose. Mec je suis confus.

67
njp

Pensez-y comme ceci:

DNS est l'annuaire téléphonique/pages jaunes. Lorsque quelqu'un veut appeler votre téléphone, il peut rechercher votre nom, obtenir votre numéro de téléphone et appeler ce téléphone. DNS fait la même chose mais pour les ordinateurs - quand quelqu'un veut aller à www.example.com ils demandent l'adresse DNS à DNS, puis ils peuvent contacter l'ordinateur qui a cette adresse IP. C'est ce que signifie résoudre. La résolution d'une adresse IP n'a rien à voir avec Apache; c'est strictement une question DNS.

ServerName et ServerAlias ressemble plus à la liste téléphonique interne d'une entreprise. Votre serveur Web est le standard téléphonique; il acceptera toutes les connexions entrantes au serveur. Ensuite, le client/l'appelant leur dira quel nom ils recherchent, et il cherchera dans la configuration Apache comment gérer ce nom.

Si le nom n'est pas répertorié en tant que ServerName/ServerAlias ​​dans la configuration Apache, Apache leur donnera toujours le premier VirtualHost répertorié. Ou, s'il n'y a pas du tout VirtualHost, il donnera le même contenu, quel que soit le nom d'hôte indiqué dans la demande.

ETA: Donc, étape par étape pour une connexion normale:

  1. Vous tapez http://www.example.com dans votre navigateur.
  2. Votre ordinateur demande à son résolveur DNS quelle adresse IP il doit utiliser lorsqu'il veut parler à www.example.com.
  3. Votre ordinateur se connecte à cette adresse IP et indique qu'il souhaite parler à www.example.com (c'est le Host:header dans HTTP).
  4. Le serveur Web examine sa configuration pour savoir quoi faire avec une demande de contenu de www.example.com. L'un des événements suivants peut se produire:
    • www.example.com est répertorié en tant que ServerName ou ServerAlias pour un VirtualHost - si c'est le cas, il utilisera la configuration de ce VirtualHost pour fournir le contenu.
    • Le serveur n'a pas du tout de VirtualHosts - si c'est le cas, alors il utilisera la configuration dans son httpd.conf pour fournir le contenu.
    • Le serveur a VirtualHosts mais www.example.com n'est répertorié dans aucun d'entre eux - si c'est le cas, le premier Virtualhost de la liste sera utilisé pour fournir le contenu.
109
Jenny D

Si vous ne définissez pas ServerName, Apache2 essaiera de le deviner à partir de/etc/hosts. ServerAlias ​​est facultatif. Le cas d'utilisation le plus courant est celui où

ServerName example.com
ServerAlias www.example.com

C'est à vous (pas au travail d'Apache2) de vous assurer que les requêtes atteignent l'IP du serveur Web, par exemple, l'enregistrement d'un domaine et la configuration des enregistrements DNS. Une façon très courante de le faire (pour le test et le développement) sans enregistrements de domaine et DNS est de définir votre fichier machine locale/etc/hosts de sorte que example.com pointe vers l'IP de votre serveur.

192.168.0.12 example.com
192.168.0.12 www.example.com
20
blau

Je suggère fortement de lire la documentation officielle sur le sujet: https://httpd.Apache.org/docs/2.4/vhosts/name-based.html

il dit "Si aucun ServerName ou ServerAlias ​​correspondant n'est trouvé dans l'ensemble d'hôtes virtuels contenant l'adresse IP et la combinaison de ports correspondantes les plus spécifiques, alors le premier hôte virtuel répertorié qui correspond qui sera utilisé. ". Donc, dans votre cas, si vous accédez à "foobar.com", la première entrée VirtualHost qui correspond en quelque sorte à l'IP 141.29.495.999 serait utilisée par httpd

Le même document indique que "de nombreux serveurs souhaitent être accessibles par plusieurs noms. C'est possible avec la directive ServerAlias". Vous pouvez donc considérer ServerAlias ​​simplement comme des entrées ServerName supplémentaires.

1
Pierluigi Vernetto