| <?xml version='1.0' encoding='UTF-8' ?> |
| <!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd"> |
| <?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?> |
| <!-- English Revision: 421174 --> |
| |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| |
| <manualpage metafile="name-based.xml.meta"> |
| <parentdocument href="./">Hosting Virtual</parentdocument> |
| <title>Soporte de Hosting Virtual basado en nombres</title> |
| |
| <summary> |
| <p>Este documento describe cómo y cuándo debe usarse hosting virtual |
| basado en nombres.</p> |
| </summary> |
| |
| <seealso><a href="ip-based.html">Hosting virtual basado en |
| IPs</a></seealso> |
| <seealso><a href="details.html">Discusión en profundidad sobre el |
| proceso de selección de host virtual</a></seealso> |
| <seealso><a href="mass.html">Configuración dinámica de Hosting virtual masivo</a></seealso> |
| <seealso><a href="examples.html">Ejemplos de hosting virtual para |
| configuraciones típicas</a></seealso> |
| <seealso><a href="examples.html#serverpath">Ejemplo de |
| configuración de ServerPath</a></seealso> |
| |
| <section id="namevip"><title>Diferencias entre el hosting vitual |
| basado en nombres y el basado en IPs</title> |
| |
| <p>El hosting virtual basado en IPs usa la dirección IP de la |
| conexión para determinar qué host virtual es el que tiene que |
| servir. Por lo tanto, necesitará tener diferentes direcciones IP |
| para cada host. Si usa hosting virtual basado en nombres, el |
| servidor atiende al nombre de host que especifica el cliente en |
| las cabeceras de HTTP. Usando esta técnica, una sola dirección IP |
| puede ser compartida por muchos sitios web diferentes.</p> |
| |
| <p>El hosting virtual basado en nombres es normalmente más |
| sencillo, porque solo necesita configurar su servidor de DNS para |
| que localice la dirección IP correcta y entonces configurar Apache |
| para que reconozca los diferentes nombres de host. Usando hosting |
| virtual basado en nombres también se reduce la demanda de |
| direcciones IP, que empieza a ser un bien escaso. Por lo tanto, |
| debe usar hosting virtual basado en nombres a no ser que haya |
| alguna razón especial por la cual tenga que elegir usar hosting |
| vitual basado en direcciones IP. Algunas de éstas razones pueden |
| ser:</p> |
| |
| <ul> |
| <li>Algunos clientes antiguos no son compatibles con el |
| hosting virtual basado en nombres. Para que el hosting |
| virtual basado en nombres funcione, el cliente debe enviar la |
| cabecera de Host HTTP. Esto es necesario para HTTP/1.1, y está |
| implementado como extensión en casi todos los navegadores |
| actuales. Si necesita dar soporte a clientes obsoletos y usar |
| hosting virtual basado en nombres, al final de este documento |
| se describe una técnica para que pueda hacerlo.</li> |
| |
| <li>El hosting virtual basado en nombres no se puede usar |
| junto con SSL por la naturaleza del protocolo SSL.</li> |
| |
| <li>Algunos sistemas operativos y algunos elementos de red |
| tienen implementadas técnicas de gestión de ancho de banda que |
| no pueden diferenciar entre hosts a no ser que no estén en |
| diferentes direcciones IP.</li> |
| </ul> |
| |
| </section> |
| |
| <section id="using"><title>Cómo usar hosting vitual basado en |
| nombres</title> |
| |
| <related> |
| <modulelist> |
| <module>core</module> |
| </modulelist> |
| |
| <directivelist> |
| <directive module="core">DocumentRoot</directive> |
| <directive module="core">NameVirtualHost</directive> |
| <directive module="core">ServerAlias</directive> |
| <directive module="core">ServerName</directive> |
| <directive module="core">ServerPath</directive> |
| <directive module="core" type="section">VirtualHost</directive> |
| </directivelist> |
| </related> |
| |
| <p>Para usar hosting virtual basado en nombres, debe especificar |
| en el servidor qué dirección IP (y posiblemente qué puerto) se va |
| a usar para atender las peticiones a los diferentes hosts. Esto |
| se hace con la directiva <directive |
| module="core">NameVirtualHost</directive>. Normalmente, cualquiera |
| o todas las direcciones IP del servidor pueden usarse, también |
| puede usar <code>*</code> como argumento para la directiva |
| <directive module="core">NameVirtualHost</directive>. Si va a usar |
| más de un puerto (por ejemplo si va usar SSL) debe añadir un |
| puerto a cada argumento, por ejemplo <code>*:80</code>. Tenga en |
| cuenta que especificando una dirección IP en la directiva |
| <directive module="core">NameVirtualHost</directive> no hace que |
| el servidor escuche automáticamente en esa dirección IP. Consulte |
| la sección <a href="../bind.html">Especificar las direcciones y |
| puertos que usa Apache</a> para obtener más información. Además, |
| cualquier dirección IP especificada debe asociarse con un |
| dispositivo de red del servidor.</p> |
| |
| <p>El siguiente paso es crear un bloque <directive type="section" |
| module="core">VirtualHost</directive> para cada host diferente que |
| quiera alojar en el servidor. El argumento de la directiva |
| <directive type="section" module="core">VirtualHost</directive> |
| debe ser el mismo que el argumento de la directiva <directive |
| module="core">NameVirtualHost</directive> (por ejemplo, una |
| dirección IP, o un <code>*</code> para usar todas las direcciones |
| que tenga el servidor). Dentro de cada bloque <directive |
| type="section" module="core">VirtualHost</directive>, necesitará |
| como mínimo una directiva <directive |
| module="core">ServerName</directive> para designar qué host se |
| sirve y una directiva <directive |
| module="core">DocumentRoot</directive> para indicar dónde están |
| los contenidos a servir dentro del sistema de ficheros.</p> |
| |
| <note><title>Añadir hosts vituales a un servidor web ya existente</title> |
| <p>Si está añadiendo hosts virtuales a un servidor web ya |
| existente, debe crear también un bloque <directive |
| type="section" module="core" >VirtualHost</directive> para el |
| host que ya tenga funcionando. Los valores de las directivas |
| <directive module="core">ServerName</directive> y <directive |
| module="core" >DocumentRoot</directive> desde este nuevo host |
| virtual deben tener los mismos valores que los de las |
| directivas <directive module="core">ServerName</directive> |
| <directive module="core">DocumentRoot</directive> |
| globales. Ponga este host virtual como el primero en el |
| archivo de configuración para que sea el que actúe como host |
| por defecto.</p> |
| </note> |
| |
| <p>Por ejemplo, suponga que está sirviendo el dominio |
| <code>www.domain.tld</code> y quiere añadir el host virtual |
| <code>www.otherdomain.tld</code>, que apunta a la misma dirección |
| IP. Entonces, lo único que tiene que hacer es añadir lo siguiente |
| al fichero <code>httpd.conf</code>:</p> |
| |
| <example> |
| NameVirtualHost *:80<br /> |
| <br /> |
| <VirtualHost *:80><br /> |
| <indent> |
| ServerName www.domain.tld<br /> |
| ServerAlias domain.tld *.domain.tld<br /> |
| DocumentRoot /www/domain<br /> |
| </indent> |
| </VirtualHost><br /> |
| <br /> |
| <VirtualHost *:80><br /> |
| <indent>ServerName www.otherdomain.tld<br /> |
| DocumentRoot /www/otherdomain<br /> |
| </indent> |
| </VirtualHost><br /> |
| </example> |
| |
| <p>También puede optar por especificar una dirección IP |
| explícitamente en lugar de usar un <code>*</code> en las |
| directivas <directive module="core" >NameVirtualHost</directive> y |
| <directive type="section" module="core" |
| >VirtualHost</directive>. Por ejemplo, puede hacer esto |
| para hacer funcionar diferentes hosts virtuales basados en nombres |
| en una dirección IP, o basados en IPs, o un conjunto de hosts |
| virtuales basados en nombres en otra dirección.</p> |
| |
| <p>También puede que quiera que se acceda a un determinado sitio |
| web usando diferentes nombres. Esto es posible con la directiva |
| <directive module="core">ServerAlias</directive>, puesta dentro de |
| la sección <directive type="section" module="core" |
| >VirtualHost</directive>. Por ejemplo, en el primer bloque |
| <directive type="section" module="core">VirtualHost</directive> de |
| arriba, la directiva <directive |
| module="core">ServerAlias</directive> indica la lista de nombres |
| que pueden usarse para acceder a un mismo sitio web:</p> |
| |
| <example> |
| ServerAlias domain.tld *.domain.tld |
| </example> |
| |
| <p>entonces las peticiones para todos los hosts en el dominio |
| <code>domain.tld</code> serán servidas por el host virtual |
| <code>www.domain.tld</code>. Los carácteres comodines |
| <code>*</code> y <code>?</code> pueden usarse para encontrar |
| equivalencias con los nombres. Por supuesto, no puede inventarse |
| nombres y ponerlos en la directiva <directive |
| module="core">ServerName</directive> o |
| <code>ServerAlias</code>. Primero debe tener su servidor de DNS |
| debidamente configurado para que pueda hacer corresponder esos |
| nombres con una dirección IP de su servidor.</p> |
| |
| <p>Para terminar, puede mejorar el rendimiento de la configuración |
| de los hosts virtuales poniendo otras directivas dentro de las |
| secciones <directive type="section" |
| module="core">VirtualHost</directive>. La mayor parte de las |
| directivas pueden ponerse en esos containers y cambiarán solo la |
| configuración del host virtual al que se refieran. Para ver si una |
| directiva en particualar puede usarse así, consulte el <a |
| href="../mod/directive-dict.html#Context">Contexto</a> de la |
| directiva. Las directivas de configuración especificadas en el |
| <em>contexto del servidor principal</em> (fuera de |
| cualquier sección <directive type="section" |
| module="core">VirtualHost</directive>) se usan única y |
| exclusivamente si sus valores no son sustituidos por alguno de los |
| parámetros de configuración del host virtual.</p> |
| |
| <p>Cuando llega una petición, el servidor primero verifica si se |
| está usando una dirección IP que coincide con el valor de la |
| directiva <directive module="core" |
| >NameVirtualHost</directive>. Si es el caso, mirará en cada |
| sección <directive type="section" |
| module="core">VirtualHost</directive> cuya IP coincida e intentará |
| encontrar si el valor de la directiva <directive module="core" |
| >ServerName</directive> o de la directiva <code>ServerAlias</code> |
| coincide con el nombre del sitio web de la petición. Si encuentra |
| una coincidencia, usa la configuración de ese servidor. Si no la |
| encuentra, usa <strong>el primer host virtual de la lista</strong> |
| cuya dirección IP coincida con el de la petición.</p> |
| |
| <p>Como consecuencia, el primer host virtual de la lista es el que |
| se usa <em>por defecto</em>. La directiva <directive |
| module="core">DocumentRoot</directive> del <em>servidor |
| principal</em> no se usará <strong>nunca</strong> cuando una |
| dirección IP coincida con el valor de la directiva <directive |
| module="core">NameVirtualHost</directive>. Si quiere usar una |
| configuración especial para peticiones que no coinciden con ningún |
| host virtual en concreto, ponga esa configuración en una sección |
| <directive type="section" module="core">VirtualHost</directive> y |
| póngala la primera en el fichero de configuración.</p> |
| |
| </section> |
| |
| <section id="compat"><title>Compatibilidad con navegadores |
| antiguos</title> |
| |
| <p>Como se dijo antes, hay algunos clientes que no envían los |
| datos necesarios para que funcione correctamente el hosting |
| virtual basado en nombres. Estos clientes van a recibir siempre |
| como respuesta a sus peticiones, páginas del primer host virtual |
| que haya en la lista para esa dirección IP (el host virtual |
| <cite>primario</cite> basado en nombres).</p> |
| |
| <note><title>¿Cómo de antiguo?</title> |
| <p>Tenga en cuenta que cuando decimos antiguo, queremos decir |
| realmente antiguo. Es muy poco probable que encuentre uno de esos |
| navegadores en uso todavía. Todas las versiones actuales de |
| cualquier navegador envían la cabecera <code>Host</code> que se |
| necesita para que el hosting virtual basado en nombres |
| funcione.</p> |
| </note> |
| |
| <p>Existe una manera de evitar este problema con la directiva |
| <directive module="core">ServerPath</directive>, aunque es un poco |
| complicada:</p> |
| |
| <p>Ejemplo de configuración:</p> |
| |
| <example> |
| NameVirtualHost 111.22.33.44<br /> |
| <br /> |
| <VirtualHost 111.22.33.44><br /> |
| <indent> |
| ServerName www.domain.tld<br /> |
| ServerPath /domain<br /> |
| DocumentRoot /web/domain<br /> |
| </indent> |
| </VirtualHost><br /> |
| </example> |
| |
| <p>¿Qué significa esto? Esto significa que una petición de |
| cualquier URI que empiece por "<code>/domain</code>" será servida |
| por el host virtual <code>www.domain.tld</code>. Esto significa |
| que las páginas pueden accederse como |
| <code>http://www.domain.tld/domain/</code> por todos los clientes, |
| aunque los clientes que envíen una cabecera <code>Host:</code> |
| pueden también acceder con |
| <code>http://www.domain.tld/</code>.</p> |
| |
| <p>Para hacer que esto funcione, ponga un enlace en la página de |
| su host virtual primario a |
| <code>http://www.domain.tld/domain/</code>. Entonces, en las |
| páginas del host virtual, asegúrese de que usa o enlaces relativos |
| (<em>por ejemplo</em>, "<code>file.html</code>" o |
| "<code>../icons/image.gif</code>") o enlaces que contengan el |
| <code>/domain/</code> anterior (<em>por ejemplo</em>, |
| "<code>http://www.domain.tld/domain/misc/file.html</code>" o |
| "<code>/domain/misc/file.html</code>").</p> |
| |
| <p>Esto requiere un poco de disciplina, pero siguiendo estas |
| reglas, puede asegurarse, casi en todos los casos, de que las |
| páginas de su sitio web podrán ser accedidas desde cualquier |
| navegador, ya sea nuevo o antiguo.</p> |
| |
| </section> |
| </manualpage> |
| |
| |
| |