Basta ya de investigar en otras webs porque llegaste al espacio perfecto, contamos con la respuesta que deseas pero sin problema.
Este documento intenta responder las preguntas más frecuentes sobre la configuración de hosts virtuales. Estos escenarios son aquellos que involucran varios sitios web que se ejecutan en un solo servidor, a través de hosts virtuales basados en nombres o basados en IP.
Ejecución de varios sitios web basados en nombres en una única dirección IP.
Su servidor tiene varios nombres de host que se resuelven en una sola dirección y desea responder de manera diferente www.example.com
y www.example.org
.
Nota
La creación de configuraciones de host virtual en su servidor Apache no causa mágicamente que se creen entradas DNS para esos nombres de host. usted debe tenga los nombres en DNS, resueltos a su dirección IP, o nadie más podrá ver su sitio web. Puede poner entradas en su hosts
archivo para pruebas locales, pero eso funcionará solo desde la máquina con esos hosts
entradas.
# Ensure that Apache listens on port 80 Listen 80DocumentRoot "/www/example1" ServerName www.example.com # Other directives here DocumentRoot "/www/example2" ServerName www.example.org # Other directives here
Los asteriscos coinciden con todas las direcciones, por lo que el servidor principal no atiende solicitudes. Debido al hecho de que el host virtual con ServerName www.example.com
es el primero en el archivo de configuración, tiene la prioridad más alta y puede verse como el defecto o primario servidor. Eso significa que si se recibe una solicitud que no coincide con uno de los especificados ServerName
directivas, será servido por este primer
.
La configuración anterior es la que querrá utilizar en casi todas las situaciones de alojamiento virtual basado en nombres. De hecho, lo único para lo que esta configuración no funcionará es cuando esté sirviendo contenido diferente basado en diferentes direcciones IP o puertos.
Nota
Puedes reemplazar *
con una dirección IP específica en el sistema. Dichos hosts virtuales solo se utilizarán para solicitudes HTTP recibidas al conectarse a la dirección IP especificada.
Sin embargo, también es útil utilizar *
en sistemas donde la dirección IP no es predecible, por ejemplo, si tiene una dirección IP dinámica con su ISP y está utilizando alguna variedad de solución de DNS dinámico. Ya que *
coincide con cualquier dirección IP, esta configuración funcionará sin cambios siempre que cambie su dirección IP.
Hosts basados en nombres en más de una dirección IP.
Nota
Cualquiera de las técnicas discutidas aquí se puede extender a cualquier número de direcciones IP.
El servidor tiene dos direcciones IP. En uno (172.20.30.40
), serviremos al servidor “principal”, server.example.com
y por el otro172.20.30.50
), daremos servicio a dos o más hosts virtuales.
Listen 80 # This is the "main" server running on 172.20.30.40 ServerName server.example.com DocumentRoot "/www/mainserver"DocumentRoot "/www/example1" ServerName www.example.com # Other directives here ... DocumentRoot "/www/example2" ServerName www.example.org # Other directives here ...
Cualquier solicitud a una dirección que no sea 172.20.30.50
será servido desde el servidor principal. Una solicitud para 172.20.30.50
con un nombre de host desconocido, o sin Host:
encabezado, se servirá desde www.example.com
.
Sirviendo el mismo contenido en diferentes direcciones IP (como una dirección interna y externa).
La máquina servidor tiene dos direcciones IP (192.168.1.1
y 172.20.30.40
). La máquina está ubicada entre una red interna (intranet) y una red externa (Internet). Fuera de la red, el nombre server.example.com
resuelve en la dirección externa (172.20.30.40
), pero dentro de la red, ese mismo nombre se resuelve en la dirección interna (192.168.1.1
).
Se puede hacer que el servidor responda a solicitudes internas y externas con el mismo contenido, con solo una
sección.
DocumentRoot "/www/server1" ServerName server.example.com ServerAlias server
Ahora las solicitudes de ambas redes se atenderán desde la misma
.
Nota:
En la red interna, solo se puede usar el nombre server
en lugar del nombre de host completo server.example.com
.
Tenga en cuenta también que, en el ejemplo anterior, puede reemplazar la lista de direcciones IP con *
, lo que hará que el servidor responda de la misma manera en todas las direcciones.
Ejecutando diferentes sitios en diferentes puertos.
Tiene varios dominios que van a la misma IP y también quiere servir a varios puertos. El siguiente ejemplo ilustra que la coincidencia de nombres tiene lugar después de que se determina la mejor combinación de dirección IP y puerto.
Listen 80 Listen 8080ServerName www.example.com DocumentRoot "/www/domain-80" ServerName www.example.com DocumentRoot "/www/domain-8080" ServerName www.example.org DocumentRoot "/www/otherdomain-80" ServerName www.example.org DocumentRoot "/www/otherdomain-8080"
Alojamiento virtual basado en IP
El servidor tiene dos direcciones IP (172.20.30.40
y 172.20.30.50
) que resuelven los nombres www.example.com
y www.example.org
respectivamente.
Listen 80DocumentRoot "/www/example1" ServerName www.example.com DocumentRoot "/www/example2" ServerName www.example.org
Solicitudes de cualquier dirección no especificada en uno de los
directivas (como localhost
, por ejemplo) irá al servidor principal, si hay uno.
Hosts virtuales mixtos basados en puerto y basados en ip
La máquina servidor tiene dos direcciones IP (172.20.30.40
y 172.20.30.50
) que resuelven los nombres www.example.com
y www.example.org
respectivamente. En cada caso, queremos ejecutar hosts en los puertos 80 y 8080.
Listen 172.20.30.40:80 Listen 172.20.30.40:8080 Listen 172.20.30.50:80 Listen 172.20.30.50:8080DocumentRoot "/www/example1-80" ServerName www.example.com DocumentRoot "/www/example1-8080" ServerName www.example.com DocumentRoot "/www/example2-80" ServerName www.example.org DocumentRoot "/www/example2-8080" ServerName www.example.org
Vhosts mixtos basados en nombres y basados en IP
Cualquier dirección mencionada en el argumento de un host virtual que nunca aparece en otro host virtual es un host virtual estrictamente basado en IP.
Listen 80DocumentRoot "/www/example1" ServerName www.example.com DocumentRoot "/www/example2" ServerName www.example.org DocumentRoot "/www/example3" ServerName www.example.net # IP-basedDocumentRoot "/www/example4" ServerName www.example.edu DocumentRoot "/www/example5" ServerName www.example.gov
Utilizando Virtual_host
y mod_proxy juntos
El siguiente ejemplo permite que una máquina de front-end haga proxy de un host virtual a través de un servidor que se ejecuta en otra máquina. En el ejemplo, un host virtual del mismo nombre está configurado en una máquina en 192.168.111.2
. los ProxyPreserveHost On
La directiva se utiliza para que se pase el nombre de host deseado, en caso de que estemos enviando varios nombres de host a una sola máquina.
ProxyPreserveHost On ProxyPass "/" "http://192.168.111.2/" ProxyPassReverse "/" "http://192.168.111.2/" ServerName hostname.example.com
Utilizando _default_
vhosts
_default_
vhosts para todos los puertos
Atrapando 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.
DocumentRoot "/www/default"
El uso de un vhost predeterminado con un puerto comodín evita eficazmente que cualquier solicitud vaya al servidor principal.
Un vhost predeterminado nunca atiende una solicitud que se envió a una dirección / puerto que se utiliza para vhosts basados en nombres. Si la solicitud contenía un desconocido o no Host:
encabezado siempre se sirve desde el vhost primario basado en el nombre (el vhost para esa dirección / puerto aparece primero en el archivo de configuración).
Puedes usar AliasMatch
o RewriteRule
para reescribir cualquier solicitud en una sola página de información (o script).
_default_
vhosts para diferentes puertos
Igual que la configuración 1, pero el servidor escucha en varios puertos y queremos usar un segundo _default_
vhost para el puerto 80.
DocumentRoot "/www/default80" # ... DocumentRoot "/www/default" # ...
El vhost predeterminado para el puerto 80 (que debe aparecen antes de cualquier vhost predeterminado con un puerto comodín) captura todas las solicitudes que se enviaron a una dirección IP no especificada. El servidor principal nunca se utiliza para atender una solicitud.
_default_
vhosts para un puerto
Queremos tener un vhost predeterminado para el puerto 80, pero no otros vhosts predeterminados.
DocumentRoot "/www/default" ...
Una solicitud a una dirección no especificada en el puerto 80 se atiende desde el vhost predeterminado. Cualquier otra solicitud a una dirección y puerto no especificados se atiende desde el servidor principal.
Cualquier uso de *
en una declaración de host virtual tendrá mayor precedencia que _default_
.
Migrar un vhost basado en nombre a un vhost basado en IP
El vhost basado en nombre con el nombre de host www.example.org
(de nuestro ejemplo basado en nombre, configuración 2) debería obtener su propia dirección IP. Para evitar problemas con los servidores de nombres o proxies que almacenaron en caché la dirección IP anterior para el vhost basado en nombres, queremos proporcionar ambas variantes durante una fase de migración.
La solución es fácil, porque simplemente podemos agregar la nueva dirección IP (172.20.30.50
) al VirtualHost
directiva.
Listen 80 ServerName www.example.com DocumentRoot "/www/example1"DocumentRoot "/www/example2" ServerName www.example.org # ... DocumentRoot "/www/example3" ServerName www.example.net ServerAlias *.example.net # ...
Ahora se puede acceder al vhost a través de la nueva dirección (como un vhost basado en IP) y a través de la dirección anterior (como un vhost basado en el nombre).
Utilizando el ServerPath
directiva
Tenemos un servidor con dos vhosts basados en nombres. Para hacer coincidir el host virtual correcto, un cliente debe enviar el Host:
encabezamiento. Los antiguos clientes HTTP / 1.0 no envían dicho encabezado y Apache no tiene ni idea de qué vhost intentó alcanzar el cliente (y atiende la solicitud desde el vhost principal). Para proporcionar la mayor compatibilidad con versiones anteriores posible, creamos un vhost principal que devuelve una sola página que contiene enlaces con una URL. prefix a los hosts virtuales basados en nombres.
# primary vhost DocumentRoot "/www/subdomain" RewriteEngine On RewriteRule "." "/www/subdomain/index.html" # ... DocumentRoot "/www/subdomain/sub1" ServerName www.sub1.domain.tld ServerPath "/sub1/" RewriteEngine On RewriteRule "^(/sub1/.*)" "/www/subdomain$1" # ... DocumentRoot "/www/subdomain/sub2" ServerName www.sub2.domain.tld ServerPath "/sub2/" RewriteEngine On RewriteRule "^(/sub2/.*)" "/www/subdomain$1" # ...
Debido a la ServerPath
dirigir una solicitud a la URL http://www.sub1.domain.tld/sub1/
es siempre servido desde el sub1-vhost.
Una solicitud a la URL http://www.sub1.domain.tld/
solo se sirve desde el sub1-vhost si el cliente envió un Host:
encabezamiento. Si no Host:
Se envía el encabezado, el cliente obtiene la página de información del host principal.
Tenga en cuenta que hay una rareza: una solicitud para http://www.sub2.domain.tld/sub1/
también se sirve desde el sub1-vhost si el cliente no envió Host:
encabezamiento.
los RewriteRule
Las directivas se utilizan para asegurarse de que un cliente que envió un Host:
El encabezado puede usar ambas variantes de URL, es decir, con o sin URL prefix.
Comentarios y calificaciones
Si estás contento con lo expuesto, tienes el poder dejar una división acerca de qué le añadirías a este ensayo.