diferencia entre _default_:* y *:* en el contexto de VirtualHost

diferencia entre _default_:* y *:* en el contexto de VirtualHost

quiero saber la diferencia entre"por defecto:*" y "*:*"en el contexto de VirtualHost.

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

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

No conozco la diferencia y el propósito de uso.

gracias

Respuesta1

La solución está en la documentación de Apache 2.2.sobre la directiva Virtualhost:

Sintaxis: ... (...) Dirección puede ser:

  • La dirección IP del host virtual;
  • Un nombre de dominio completo para la dirección IP del host virtual (no recomendado);
  • El personaje *, que se utiliza sólo en combinación conNombreVirtualHost* para que coincida con todas las direcciones IP; o
  • La cadena _predeterminada_, que se utiliza sólo conalojamiento virtual IPpara capturar direcciones IP no coincidentes.

Existen dos formas de manejar Virtualhosts: virtualhosting basado en nombres y Virtualhosting basado en IP.

Con los hosts virtuales basados ​​en nombres, tiene una lista de hosts virtuales, cada uno de los cuales administra uno o varios nombres de dominio y cada uno está asociado con un par listening IP:port. *es un valor especial que significatodas las IP en este host. El virtualHost predeterminado es el primero declarado en esta lista para cada dirección de escucha determinada.

Con VirtualHosts basados ​​en IP, la ServerNamedirectiva de VirtualHost no se utiliza, la información importante es la IP de escucha (y el puerto), y el VirtualHost predeterminado es el primero que coincide con la IP que maneja la solicitud entrante.

Entonces, con una configuración de alojamiento virtual basada en nombre:

  • <Virtualhost *:80> with ServerName foo.comsignifica "en todas las IP administradas en este host", "en el puerto 80", "si el encabezado del host de solicitud es foo.com" usaré este host virtual
  • <Virtualhost *:*> with Servername foo.comsignifica "en todas las IP administradas en este host", "en todos los puertos", "si el encabezado del host de solicitud es foo.com" usaré este virtualhost
  • <Virtualhost 10.0.0.2:*> with Servername foo.comsignifica "para solicitudes entrantes desde mi interfaz de red 10.0.0.2", "en todos los puertos", "si el encabezado del host de solicitud es foo.com", usaré este virtualhost
  • <Virtualhost _default_:*> with Servername foo.com: no debe usarse con alojamiento virtual basado en nombres

Y en un Virtualhosting basado en IP:

  • <Virtualhost 10.0.0.2:*>significa "Usaré este host virtual para las solicitudes que lleguen a mi interfaz 10.0.0.2"
  • <Virtualhost _default_:443>significa "Usaré este host virtual para todas las demás interfaces de red en mi host para solicitudes provenientes del puerto 443"
  • <Virtualhost _default_:*>significa "Usaré este host virtual para todas las demás interfaces de red de mi host, si no coincide con una regla anterior y si el encabezado del host de solicitud no coincide con un host virtual basado en nombre"

Así que se trata de definir un Virtualhost general. La documentación agrega:

Cuando se utiliza alojamiento virtual basado en IP, _default_se puede especificar el nombre especial, en cuyo caso este host virtual coincidirá con cualquier dirección IP que no aparezca explícitamente en otro host virtual. En ausencia de un _default_host virtual, la configuración del servidor "principal", que consta de todas aquellas definiciones fuera de cualquier sección VirtualHost, se utiliza cuando no se produce ninguna coincidencia de IP. (Pero tenga en cuenta que cualquier dirección IP que coincida con una directiva NameVirtualHost no utilizará ni la configuración del servidor "principal" ni el _default_host virtual. Consulte la documentación de alojamiento virtual basado en nombres para obtener más detalles).

Entonces, después de todas estas cosas, queda bastante "claro" que mezclar alojamiento virtual basado en IP y basado en nombres podría convertirse en un desastre. Con Apache 2.2, el alojamiento virtual basado en nombres se usaba solo si NameVirtualhost <something>se usaba.

Perocon lo nuevoApache 2.4versiónEstas cosas son realmente más fáciles de entender, sin NameVirtualhostdeclaración.La directiva NameVirtualHost ya no tiene ningún efecto excepto el de emitir una advertencia. Cualquier combinación de dirección/puerto que aparezca en múltiples hosts virtuales se trata implícitamente como un host virtual basado en nombre.. No más pensamientos complejos, incluso la documentación ahora es más sencilla:

  • El carácter *, que actúa como comodín y coincide con cualquier dirección IP.
  • La cadena _default_, que es un alias de *

Entonces con Apache 2.4 la respuesta es,es lo mismo.

Respuesta2

_default_vhosts para todos los puertos

Capturar cada solicitud a cualquier dirección IP y puerto no especificados, es decir, una combinación de dirección/puerto que no se utiliza para ningún otro host virtual.

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

información relacionada