Aquest document tracta de respondre a les preguntes fetes comunament sobre la configuració de hosts virtuals. Aquests escenaris són aquells que involucren múltiples llocs web que s'executen en un únic servidor, a través basat en noms o basades en IP hosts virtuals.

 

Execució de diversos llocs web basats en noms en una sola direcció IP.

El servidor té una única adreça IP, i diversos àlies (CNAMES) punt a aquesta màquina en el DNS. Vostè vol executar un servidor web per www.example.com i www.example.org en aquesta màquina.

 

Nota

Creació de la configuració de la màquina virtual al servidor Apache no causa màgicament entrades DNS que es creïn per a aquells noms d'amfitrió. Vostè ha de tenir els noms de DNS, resolent a la seva adreça IP, o ningú més serà capaç de veure el seu lloc web. Vostè pot posar les entrades en el teu amfitrionsarxiu per a proves locals, però que va a treballar només de la màquina amb aquestes entrades amfitrions.

# Assegureu-vos que Apache escolta al port 80 
Escoltar 80 # Escolta les peticions de la màquina virtual en totes les adreces IPNameVirtualHost *: 80 <VirtualHost *:80> DocumentRoot /www/example1 ServerName www.example.com# Altres directives aquí </VirtualHost> < VirtualHost *: 80>DocumentRoot /www/example2 ServerName www.example.org # Altres directives aquí</VirtualHost>

Els asteriscs coincideixen totes les direccions, de manera que el servidor principal serveix cap sol·licitud. A causa del fet que www.example.com és primer a l'arxiu de configuració, que té la prioritat més alta i pot ser vist com elvalor per defecte o primària servidor. Això vol dir que si es rep una petició que no coincideix amb un dels especificats ServerName directives, que serà servit per aquesta primera VirtualHost.

Nota

Vostè pot, si ho desitja, reemplaçar * amb l'adreça IP real del sistema. En aquest cas, l'argument per VirtualHost ha de coincidir amb l'argument NameVirtualHost:

NameVirtualHost 172.20.30.40 <VirtualHost 172.20.30.40> # etc...

 

No obstant això, és a més útil fer servir * en sistemes on l'adreça IP no és predictible - per exemple, si té una adreça IP dinàmica amb el seu proveïdor d'Internet, i està utilitzant alguna varietat de solució de DNS dinàmic. Des * coincideix amb qualsevol adreça IP, aquesta configuració funcionaria sense canvis quan canviï d'adreça IP.

La configuració anterior és el que vostè haurà d'utilitzar en gairebé totes les situacions de hosting virtual basat en nom. L'única cosa que aquesta configuració no funcionarà per, de fet, és quan vostè està servint contingut diferent basat en diferents direccions IP o ports.

 

Hosts basats en noms en més d'una adreça IP.

Qualsevol de les tècniques descrites aquí es pot estendre a qualsevol nombre d'adreces IP.

El servidor té dues adreces IP. En un (172.20.30.40), servirem el servidor "principal", server.domain.com i per l'altre (172.20.30.50), anem a servir a dos o més hosts virtuals.

listen 80  # Aquest és el servidor "principal" que s'executa en 172.20.30.40

servername server.domain.com

documentroot /www/mainserver


# Aquesta és l'altra direcció

NameVirtualHost 172.20.30.50

<virtualhost 172.20.30.50>

documentroot /www/example1

servername www.example.com  # Altres directives aquí...

</virtualhost>
 

<virtualhost 172.20.30.50>

documentroot /www/example2

servername www.example.org  # Altres directives aquí...

</virtualhost>

 

Qualsevol sol·licitud a una adreça diferent de 172.20.30.50 se servirà des del servidor principal. Una sol·licitud per 172.20.30.50 amb un nom de sistema principal desconegut, o cap Host: capçalera, se serveix de www.example.com.

La màquina servidor té dues adreces IP (192.168.1.1 i 172.20.30.40). La màquina està assegut entre una xarxa interna (intranet) i una xarxa (internet) extern. Fora de la xarxa, el nom server.example.com resol a l'adreça externa (172.20.30.40), però dins de la xarxa, aquest mateix nom es resol en la direcció interna (192.168.1.1).

El servidor es pot fer per respondre a les sol·licituds internes i externes amb el mateix contingut, amb només un VirtualHost secció.

192.168.1.1 namevrtualhost

namevrtualhost 172.20.30.40

<virtualhost 172.20.30.40 192.168.1.1>

documentroot /www/server1

servername server.example.com

serveralias ​​servidor

</virtualHost>

Ara demana d'ambdues xarxes se serveix de la mateixa virtualhost.


Nota:
A la xarxa interna, un pot utilitzar el nom 
del servidor en lloc del nom d'amfitrió totalment qualificat server.example.com.

Tingueu en compte també que, en l'exemple anterior, es pot reemplaçar la llista d'adreces IP amb *, el que farà que el servidor per respondre la mateixa en totes les direccions.

Vostè té diversos dominis que van a la mateixa IP i també vol servir a múltiples ports. En definir els ports a l'etiqueta "NameVirtualHost", pot permetre que això funcioni. Si voleu utilitzar <VirtualHost nom: port> sense el nom NameVirtualHost: port o intenta utilitzar la directiva Listen, la configuració no funcionarà.

listen 80

listen 8080 

namevirtualhost 172.20.30.40:80 

namevirtualhost 172.20.30.40:8080

<virtualhost 172.20.30.40:80>

servervame www.example.com

documentroot /www/Domini-80

</virtualhost> 

<virtualhost 172.20.30.40:8080>

servername www.example.com

documentroot /www/Domini-8080

</virtualhost>

<virtualhost 172.20.30.40:80>

servername www.example.org

documentroot /www/altre_domini-80

</virtualhost>

<virtualhost 172.20.30.40:8080>

servername www.example.org

documentroot /www/altre_domini-8080

</virtualhost>

 

El servidor té dues adreces IP (172.20.30.40 i 172.20.30.50) que es resolen als noms de www.example.com i www.example.org respectivament.

listen 80

<virtualhost 172.20.30.40>

documentroot /www/example1

servername www.example.com

</virtualhost>

<virtualhost 172.20.30.50>

documentroot /www/example2

servername www.example.org

</virtualhost>

Les sol·licituds de qualsevol direcció no especificada en una de les <VirtualHost> directives (com localhost, per exemple) es van al servidor principal, si és que existeix.

La màquina servidor té dues adreces IP ( 172.20.30.40 i 172.20.30.50) que es resolen als noms www.example.com i www.example.org respectivament. En cada cas, volem executar hosts en els ports 80 i 8080.

listen 172.20.30.40:80

listen 172.20.30.40:8080

listen 172.20.30.50:80

listen 172.20.30.50:8080

<virtualhost 172.20.30.40:80>

documentroot /www/example1-80

servername www.example.com

</virtualhost>

<virtualhost 172.20.30.40:8080>

documentroot /www/example1-8080

servername www.example.com

</virtualhost>

<virtualhost 172.20.30.50:80>

documentroot /www/example2-80

servername www.example.org

</virtualhost>

<virtualhost 172.20.30.50:8080>

documentroot /www/example2-8080

servername www.example.org

</virtualhost>

 

En alguns dels meus adreces, el que vull fer hosts virtuals en nom, i en altres, els exèrcits basats en IP.

Escoltar 80 NameVirtualHost 172.20.30.40 <VirtualHost 172.20.30.40> DocumentRoot /www/example1 ServerName www.example.com </VirtualHost> <VirtualHost 172.20.30.40> DocumentRoot /www/example2 ServerName www.example.org </VirtualHost> <VirtualHost 172.20.30.40> DocumentRoot /www/example3 ServerName www.example3.net </VirtualHost> basada en IP # <VirtualHost 172.20.30.50> DocumentRoot /www/Exemple4 ServerName www.example4.edu </VirtualHost> <VirtualHost 172.20.30.60> DocumentRoot /www/Exemple5 ServerName www.example5.gov </VirtualHost>

El següent exemple permet que una màquina de front-end per proxy d'una màquina virtual a través d'un servidor que executa en una altra màquina. En l'exemple, un host virtual del mateix nom es configura en una màquina en192.168.111.2El ProxyPreserveHost En la directiva s'utilitza perquè el nom d'amfitrió desitjat es passa a través de, en cas que estem passant diversos noms d'amfitrió a una sola màquina.

VirtualHost *: *> 
ProxyPreserveHost En 
ProxyPass /http://192.168.111.2/
ProxyPassReverse /http://192.168.111.2/
ServerName hostname.example.com 
</VirtualHost>

default_ vhosts per a tots els ports

La captura de cada sol·licitud a qualsevol adreça IP i el port no especificat, és a dir, una combinació de direcció/port que no s'utilitza per a cap altre amfitrió virtual.

<VirtualHost _default _: *>DocumentRoot /www/default </VirtualHost> 

Usant tal amfitrió virtual per defecte amb un port comodí impedeix eficaçment qualsevol sol·licitud va al servidor principal.

Un amfitrió virtual per defecte no serveix una petició que va ser enviada a una adreça/port que s'utilitza per vhosts basats en noms. Si la sol·licitud contenia un desconegut o cap Host: capçalera sempre se serveix de nom a força d'amfitrió virtual primari (el host virtual per aquesta direcció/port que apareix per primera vegada en el fitxer de configuració).

Podeu utilitzar AliasMatch o RewriteRule reescriure qualsevol sol·licitud d'una sola pàgina d'informació (o script).

_default_vhosts per diferents ports

Igual que la configuració 1, però el servidor escolta en diversos ports i volem usar un segon _default_ amfitrió virtual per al port 80.

<VirtualHost _default_: 80> DocumentRoot /www/default80#... </VirtualHost> <VirtualHost _default_: *>DocumentRoot /www/default#... </VirtualHost> 

El host virtual per defecte per al port 80 (que ha de comparèixer davant qualsevol host virtual per defecte amb un port comodí) atrapa totes les sol·licituds que van ser enviades a una adreça IP especificada. El servidor principal no es fa servir per servir la petició.

_default_ vhosts per a un port

Volem tenir un amfitrió virtual per defecte per al port 80, però no hi ha altres vhosts per defecte.

><VirtualHost _default_: 80> DocumentRoot /www/default ...</VirtualHost>

Una petició a una adreça especificada al port 80 se serveix des del host virtual per defecte. Qualsevol altra sol·licitud a una adreça no especificada i el port se serveix des del servidor principal.

El host virtual basat en nom, amb el nom d'amfitrió www.example.org (del nostre nom a força de exemple, la configuració 2) ha de rebre la seva pròpia adreça IP. Per evitar problemes amb els servidors de noms o apoderats que s'emmagatzemen en memòria cau l'adreça IP d'edat per al host virtual basat en nom volem oferir dues variants durant una fase de migració.

La solució és fàcil, perquè podem simplement afegir la nova adreça IP (172.20.30.50) a la VirtualHostDirectiva.

Escoltar 80 
ServerName www.example.com 
DocumentRoot /www/example1 NameVirtualHost 172.20.30.40 <VirtualHost 172.20.30.40 172.20.30.50>DocumentRoot/www/example2ServerName www.example.org#... </VirtualHost> <VirtualHost 172.20.30.40 > DocumentRoot /www/example3 ServerName www.example.net ServerAlias ​​*.example.net#... </VirtualHost> 

El host virtual ara es pot accedir a través de la nova direcció (com un host virtual basat en IP) ia través de l'adreça antiga (com un host virtual basat en noms).

Tenim un servidor amb dos vhosts basats en noms. Per tal de que coincideixi amb el host virtual correcta un client ha d'enviar la correcta Host: capçalera. Vell clients HTTP/1.0 no envia una capçalera de tals i Apache té ni idea del que VHOST el client va tractar d'arribar (i serveix la sol·licitud del amfitrió virtual primari). Per proporcionar la major compatibilitat possible vam crear un amfitrió virtual primari que retorna una sola pàgina conté enllaços amb un prefix d'URL per als hosts virtuals basats en noms.

NameVirtualHost 172.20.30.40 <VirtualHost 172.20.30.40># amfitrió virtual primariDocumentRoot /www/subdomini RewriteEngine OnRewriteRule ^/. * /www/subdomain/index.html#... </VirtualHost> <VirtualHost 172.20.30.40> DocumentRoot /www/subdomini/sub1nom_servidor www.sub1.domain.tld ServerPath /sub1/RewriteEngine On RewriteRule ^ (/sub1/.*) /www/subdomini $1#... </VirtualHost> <VirtualHost 172.20.30.40> DocumentRoot /www/subdomini/sub2 nom_servidor www.sub2.domain.tld ServerPath /sub2/Rewrite Engine On RewriteRule ^ (/sub2/.*) /www/subdomini $1#... </VirtualHost> 

A causa de la ServerPath Directiva una petició a la URL http://www.sub1.domain.tld/sub1/ està sempre serveix a partir de la sub1-amfitrió virtual.

Una petició a la URL http://www.sub1.domain.tld/ Només se serveix de la sub1-amfitrió virtual si el client va enviar una correcta Host: capçalera. Si no hi ha Host: és enviada encapçalat el client obté la pàgina d'informació del host primari.

Tingueu en compte que hi ha una raresa: La sol·licitud per http://www.sub2.domain.tld/sub1/ també se serveix de la sub1-amfitrió virtual si el client envia cap Host: capçalera.

Els RewriteRule directives s'utilitzen per assegurar-se que un client que va enviar una correcta Host: capçalera pot fer servir les dues variants d'URL, és a dir, amb o sense prefix d'URL.