Comment ServerName et ServerAlias ​​fonctionnent-ils?

62

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

<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 avec les adresses IP sur lesquelles ce serveur peut être contacté. Par exemple, si vous pouviez accéder au serveur sur plusieurs adresses IP, vous pouvez limiter cette directive à une seule au lieu des deux.

ServerName- Si la partie hôte de la requête HTTP correspond à ce nom, autorisez la requête. Normalement, il s’agit d’un nom de domaine mappé sur une adresse IP, mais dans ce cas, l’hôte de la requête HTTP doit correspondre à cette adresse IP.

ServerAlias - Noms alternatifs acceptés par le serveur.

La partie déroutante pour moi est que, dans le scénario ci-dessus, si je définissais ServerAlias mytestname.compuis adressais une requête HTTP à mytestname.com, il faudrait un enregistrement DNS pointant vers l'adresse IP du serveur pour que cela fonctionne? Dans quel cas, ServerAlias ​​est-il simplement des entrées EXTRA ServerName?

Disons que j’avais une entrée DNS telle que, foobar.com = 141.29.495.999mais que j’étais vide ServerName = 141.29.495.999et que j’étais ServerAliasvide, cela voudrait-il dire que bien que foobar.com soit résolu à la bonne adresse IP, car il n’existe aucune référence permettant d’accepter foobar.com dans ServerNameou ServerAlias?

Ou quelque chose. Homme je suis confus.

njp
la source
1
Vous avez oublié quelques mots dans l'avant-dernier paragraphe. :-)
ThatGraemeGuy

Réponses:

105

Pensez-y comme ceci:

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

Le ServerNameet ServerAliasressemble plus à une liste de téléphone 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 la configuration d'Apache leur indiquera comment gérer ce nom.

Si le nom n'est pas répertorié en tant que ServerName / ServerAlias ​​dans la configuration d'apache, apache leur donnera toujours le premier hôte virtuel 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 requête.

ETA: Donc, pas à pas pour une connexion normale:

  1. Vous tapez http://www.example.comdans votre navigateur.
  2. Votre ordinateur demande à son résolveur DNS quelle adresse IP il doit utiliser lorsqu'il souhaite parler www.example.com.
  3. Votre ordinateur se connecte à cette adresse IP et dit qu'il veut parler www.example.com(c'est l'en- Host:tête dans HTTP).
  4. Le serveur Web examine sa configuration pour savoir quoi faire avec une demande de contenu www.example.com. L'une des situations suivantes peut se produire:
    • www.example.comest répertorié en tant que ServerNameou ServerAliaspour un VirtualHost- si tel est le cas, il utilisera la configuration de ce VirtualHost pour fournir le contenu.
    • Le serveur ne dispose d'aucun hôte virtuel - si tel est le cas, il utilisera la configuration de son fichier httpd.conf pour transmettre le contenu.
    • Le serveur possède des www.example.comhôtes virtuels, mais ne figure dans aucune d’entre eux. Si tel est le cas, le premier hôte virtuel de la liste sera utilisé pour transmettre le contenu.
Jenny D dit Réintégrer Monica
la source
Ainsi, si la partie hôte d'une requête HTTP est www.example.com, le DNS résoudra l'adresse IP de ce nom et la partie hôte de la requête HTTP sera en réalité une adresse IP; En atteignant le serveur, Apache saura également que la demande demandée www.example.comet s'il existe une directive ServerNameou ServerAliaspour ce nom de domaine, il peut servir la racine du document?
njp
Non - la partie de la requête HTTP est toujours le nom d'hôte. Je vais clarifier un peu plus.
Jenny D dit réintégrer Monica le
The server has VirtualHosts but www.example.com isn't listed in any of them - if so, the first Virtualhost in the list will be used to deliver the content.. J'ai testé cela. C'est vrai mais je ne suis pas sûr que ce soit d'abord Virtualhost. Merci pour l'information. +1
SMMousavi
19

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

ServerName example.com
ServerAlias www.example.com

C’est à vous (et non 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 d’enregistrements DNS. Un moyen très courant de le faire (pour les tests et le développement) sans enregistrements de domaine et dns consiste à définir le fichier / etc / hosts de votre machine locale de sorte que example.com pointe sur l’adresse IP de votre serveur.

192.168.0.12 example.com
192.168.0.12 www.example.com
blau
la source
0

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 aucune ServerName correspondant ou ServerAlias se trouve dans l'ensemble des hôtes virtuels contenant l'adresse IP correspondante la plus spécifique et la combinaison port, puis le premier répertorié hôte virtuel correspondant 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 sera utilisée par httpd

Le même document indique "De nombreux serveurs veulent être accessibles sous plusieurs noms. Cela est possible avec la directive ServerAlias". Vous pouvez donc considérer ServerAlias ​​simplement comme des entrées ServerName supplémentaires.

Pierluigi Vernetto
la source