Virtual Host con apache wamp

De ChuWiki
Saltar a: navegación, buscar

Introducción

Normalmente un servidor Apache atiende a un puerto y muestra los ficheros contenidos en su directorio de documentos públicos. Por ejemplo, en el caso de wamp server, suele ser habitual el puerto 80 por defecto y el directorio c:\wamp\wwww, de forma que http://servidor/undirectorio/unfichero.html nos dará el contenido de c:\wamp\www\undirectorio\unfichero.html a través del puerto 80

Sin embargo, es posible configurar el servidor apache para que atienda más puertos aparte del 80 y redirija determinadas llamadas a otros servidores apache o de otra tipo. Para ello es necesario crear lo que se llaman servidores virtuales o virtual host.

Configurar un virtual host

En el fichero httpd.conf ubicado, por ejemplo, en C:\wamp\bin\apache\Apache2.2.17\conf en el caso de wamp server, debemos descomentar la linea que hay hacia el final del fichero, quitando la # que ha delante

#Include conf/extra/httpd-vhosts.conf

esto hará que se incluya el fichero C:\wamp\bin\apache\Apache2.2.17\conf\extra\httpd-vhosts.conf en el que hay unos ejemplos de host virtuales. En ese fichero httpd-vhost.conf borramos todo excepto la línea que pone

NameVirtualHost *:80

y debajo definimos nuestro virtual host como queramos. Por ejemplo

<VirtualHost *:81>
  ServerName openfire
  DocumentRoot "C:/wamp/www/"
  RewriteEngine on
  RewriteRule /http-bind http://openfire:7070/http-bind/ [P]
</VirtualHost>

En estas líneas le estamos diciendo:

  • <VirtualHost *:81> debe atender al puerto 81
  • ServerName openfire el nombre del servidor será openfire. Obviamente no funcionará http://openfire:81 ... si no hay un DNS o algo que sea capaz de resolver el nombre openfire a nuetra IP.
  • DocumentRoot "C:/wamp/www/" el directorio en el que están los documentos que deben servirse con este puerto. Aquí se ha puesto el mismo directorio por defecto de wamp, por lo que el puerto 80 y el puerto 81 servirían los mismos documentos.
  • RewriteEngine on indica que hay determinadas peticiones que queremos que se redirijan a otros servidores. Para que funcione, el módulo mod_rewrite de apache debe estar activado.
  • RewriteRule /http-bind http://openfire:7070/http-bind/ [P] La regla de redirección que queremos. Cualquier cosa que se pida a http://openfire:81/http-bind se redirigirá a http://openfire:7070/http-bind/, que puede corresponder a otro servidor de lo que sea que tengamos arrancado y a la escucha del puerto 7070.

Con todo esto, si hacemos por ejemplo http://openfire:81/undirectorio/unfichero.html, tendremos lo mismo que si vamos a http://wampserver/undirectorio/unfichero.html, pero si hacemos por ejemplo http://openfire:81/http-bind, obtendremos lo que nos devuelva el otro servidor con http://openfire:7070/http-bind/

http-bind y chats

Este mecanismo es habitual para los servidores de chat, cuando queremos que sean accesibles desde un navegador web, es decir, queremos poder chatear desde nuestro navegador.

Normalmente un servidor de chat atiende a puertos específicos que no son el 80. Por ejemplo, openfire atiende al 7070 para peticiones http de clientes de chat que corren en navegador. El puerto 7070 puede estar "capado" por los proxys, firewalls y/o routers que haya en la red entre nuestro navegador y el servidor de chat, mientras que el puerto 80, estándar para navegar por internet, suele estar siempre abierto.

La solución es entonces la de estos virtual host. El cliente de chat en el navegador suele hacer las peticiones al puerto 80, a una url del estilo http://openfire/http-bind. El virtual host se encargará de redirigir estas peticiones al servidor de chat http://openfire:7070/http-bind/, que habitualmente está accesible desde el servidor apache.

Por supuesto, en el virtual host pondríamos <VirtualHost *:80> y no <VirtualHost *:81> como tenemos en el ejemplo.