¿Cómo funciona ServerName y ServerAlias?

62

Es la siguiente parte de una configuración de host virtual sobre la que necesito más aclaraciones:

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

Esta es una configuración de ejemplo, similar a la que tengo actualmente (no tengo un nombre de dominio en este momento).

<VirtualHost *:80>- Permita la siguiente configuración para todas las solicitudes HTTP realizadas en el puerto 80 a las IP con las que se puede contactar a este servidor. Por ejemplo, si se puede acceder al servidor en más de una IP, puede restringir esta directiva a solo una en lugar de a ambas.

ServerName- Si la parte del host de la solicitud HTTP coincide con este nombre, permita la solicitud. Normalmente, este sería un nombre de dominio que se asigna a una IP, pero en este caso el host de solicitud HTTP debe coincidir con esta IP.

ServerAlias - Nombres alternativos aceptados por el servidor.

La parte confusa para mí es que, en el escenario anterior, si configuré ServerAlias mytestname.comy luego hice una solicitud HTTP mytestname.com, ¿tendría que haber un registro DNS apuntando a la IP del servidor para que esto funcione? En cuyo caso, ¿ServerAlias ​​es básicamente entradas EXTRA ServerName?

Digamos que tenía una entrada de DNS tal que, foobar.com = 141.29.495.999pero luego la tuve ServerName = 141.29.495.999y ServerAliasestaba vacía, ¿eso significaría que aunque foobar.com se resuelva con la IP correcta, porque no hay referencia para aceptar foobar.com en ServerNameo ServerAlias?

O algo. Hombre, estoy confundido.

njp
fuente
1
Olvidaste algunas palabras en el penúltimo párrafo. :-)
ThatGraemeGuy

Respuestas:

105

Piensa en esto, de esta manera:

DNS es el directorio telefónico / páginas amarillas. Cuando alguien quiere llamar a su teléfono, puede buscar su nombre y obtener su número de teléfono y llamar a ese teléfono. DNS hace lo mismo pero para las computadoras: cuando alguien quiere ir, www.example.comle piden a DNS la dirección IP y luego pueden contactar a la computadora que tiene esa dirección IP. Eso es lo que significa resolver . Resolver una dirección IP no tiene nada que ver con Apache; Es estrictamente una cuestión de DNS.

El ServerNamey ServerAliases más como la lista de teléfonos internos de una empresa. Su servidor web es la centralita; aceptará todas las conexiones entrantes al servidor. Luego, el cliente / llamante les dirá qué nombre están buscando, y buscará en la configuración de Apache cómo manejar ese nombre.

Si el nombre no aparece como ServerName / ServerAlias ​​en la configuración de apache, apache siempre les dará el primer VirtualHost en la lista. O, si no hay VirtualHost, dará el mismo contenido sin importar el nombre de host que se indique en la solicitud.

ETA: Entonces, paso a paso para una conexión normal:

  1. Escribe http://www.example.comen su navegador.
  2. Su computadora le pregunta a su solucionador de DNS qué dirección IP debe usar cuando quiere hablar www.example.com.
  3. Su computadora se conecta a esa dirección IP y dice que quiere hablar www.example.com(ese es el Host:encabezado en HTTP).
  4. El servidor web analiza su configuración para determinar qué hacer con una solicitud de contenido www.example.com. Cualquiera de los siguientes puede suceder:
    • www.example.comaparece como ServerNameao ServerAliaspara a VirtualHost: si es así, utilizará la configuración de ese VirtualHost para entregar el contenido.
    • El servidor no tiene VirtualHosts en absoluto; si es así, utilizará la configuración en su httpd.conf para entregar el contenido.
    • El servidor tiene VirtualHosts pero www.example.comno figura en ninguno de ellos; de ser así, el primer Virtualhost de la lista se utilizará para entregar el contenido.
Jenny D dice Reinstate Monica
fuente
Por lo tanto, si la parte del host de una solicitud HTTP es www.example.com, el DNS resolverá la dirección IP para ese nombre, y la parte del host de la solicitud HTTP en realidad será una IP; al llegar al servidor, Apache también sabrá que la solicitud de pedido www.example.comy si hay una ServerNameo ServerAliasDirectiva para ese nombre de dominio, puede servir la raíz del documento?
njp
No: la parte de solicitud HTTP sigue siendo el nombre de host. Te aclararé un poco más.
Jenny D dice Reinstate Monica el
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.. Probé esto. Es correcto, pero no estoy seguro de que sea primero Virtualhost. Gracias por la información. +1
SMMousavi
19

Si no define ServerName, apache2 intentará adivinarlo desde / etc / hosts. ServerAlias ​​es opcional. El caso de uso más habitual es donde

ServerName example.com
ServerAlias www.example.com

Depende de usted (no del trabajo de apache2) asegurarse de que las solicitudes lleguen a la IP del servidor web, por ejemplo, registrar un dominio y configurar registros DNS. Una forma muy común de hacerlo (para pruebas y desarrollo) sin registros de dominio y DNS es configurar su máquina local / etc / hosts para que example.com apunte a la IP de su servidor.

192.168.0.12 example.com
192.168.0.12 www.example.com
blau
fuente
0

Sugeriría encarecidamente leer la documentación oficial sobre el tema: https://httpd.apache.org/docs/2.4/vhosts/name-based.html

dice "Si no se encuentra ServerName o ServerAlias ​​coincidentes en el conjunto de hosts virtuales que contienen la combinación de puerto y dirección IP más específica, se utilizará el primer host virtual que coincida con el que se usará". . Entonces, en su caso, si accede a "foobar.com", httpd usaría la primera entrada de VirtualHost que de alguna manera coincida con la IP 141.29.495.999

El mismo documento dice "Muchos servidores quieren ser accesibles por más de un nombre. Esto es posible con la directiva ServerAlias". Por lo tanto, puede considerar ServerAlias ​​simplemente como entradas adicionales de ServerName.

Pierluigi Vernetto
fuente