Reciclando Direcciones IP con Apache

ArticleCategory: [Choose a category for your article]

System Administration

AuthorImage:[Here we need a little image form you]

[Photo of the Author]

TranslationInfo:[Author and translation history]

original in en Atif Ghaffar 

en to es José Rodríguez Ruibal

AboutTheAuthor:[A small biography about the author]

Vivo y trabajo en Suiza como webmaster/administrador unix. Entre mis pasiones se incluyen Linux, unix, Perl, Apache y el software GPL. Más sobre mí en mi homepage

Abstract:[Here you write a little summary]

Este artículo demuestra cómo servir múltiples servidores web utilizando la misma dirección ip con Apache bajo Unix/Linux. El artículo asume que el lector tiene conocimientos de Apache, de DNS y de Unix.
La audiencia objetivo de este artículo son los ISP, administradores de sistemas o cualquiera que quiera leerlo y aprender.

ArticleIllustration:[This is the title picture for your article]

[Illustration]

ArticleBody:[The article body]

Por qué deberíamos reciclar direcciones IP ?

El reciclado de las direcciones ip es útil por diversos motivos.

  1. nos podemos quedar fácilmente sin direcciones ip
  2. puede ser que tan solo tengamos una direccion ip (como puede ser mi caso)
  3. los administradores de sistemas pierden mucho tiempo añadiendo interfaces al servidor para utilizar múltiples direcciones ip.

Cómo reciclar las direcciones ip?

Utilizando Apache, resulta muy simple servir múltiples dominios con una sola dirección ip.
A lo largo de este artículo asumiremos que la dirección ip es la 192.168.1.1 y que el nombre del host es hometranet.home.
Simplemente, añadimos una línea como esta a nuestro fichero httpd.conf
NameVirtualHost 192.168.1.1:80
A continuación añadimos tres servidores virtuales utilizando la misma dirección ip
#Host para ficheros unix <VirtualHost 192.168.1.1:80> ServerName unix.hometranet.home DocumentRoot /www/unix/html ScriptAlias /cgi-bin/ /www/unix/cgi-bin/ TransferLog /www/unix/logs/access_log ErrorLog /www/unix/logs/error_log </VirtualHost> #Host para cosas de perl <VirtualHost 192.168.1.1:80> ServerName perl.hometranet.home DocumentRoot /www/perl/html ScriptAlias /cgi-bin/ /www/perl/cgi-bin/ TransferLog /www/perl/logs/access_log ErrorLog /www/perl/logs/error_log </VirtualHost> #Host para cosas chulas de Apache <VirtualHost 192.168.1.1:80> ServerName apache.hometranet.home DocumentRoot /www/apache/html ScriptAlias /cgi-bin/ /www/apache/cgi-bin/ TransferLog /www/apache/logs/access_log ErrorLog /www/apache/logs/error_log </VirtualHost> Asi que, utilizando una sola dirección hemos configurado tres servidores virtuales diferentes.

A continuación añadimos CNAMES o Registros A para esos nombres en el fichero de zona de nuestro servidor de nombres
y no nos olvidamos de incrementar el n&uacte;mero de serie :)
por ejemplo: en mi /var/named/hometranet.home.fwd, añadiría
perl.hometranet.home. IN A 192.168.1.1 apache.hometranet.home. IN A 192.168.1.1 unix.hometranet.home. IN A 192.168.1.1
Nota importante: si llamamos a este host con otro nombre diferente al que damos en el ficheros de configuraci&ocute;n de los virtuales, será el primer host virtual quien responderá.
Con Apache 1.3.x el &uacte;ltimo debería haber respondido.
Por ejemplo: si este host se llama madmag, si llamamos a http://madmag.hometranet.home tendremos la misma respuesta que si llamamos a unix.hometranet.home.

Usando wildcards, nombres de host dinámicos (dynamic hostnames)

Esta es la parte divertida. Apache permite utilizar wildcards en los nombres de los hosts.
Esto quiere decir que podemos configurar un dominio *.home.hometranet.home y todas las peticiones a los servidores user1.home.hometranet.home, user2.home.hometranet.home, user3.home.hometranet.home,etc responderán.
Ejemplo:

#host para usuarios <VirtualHost 192.168.1.1:80> ServerName home.hometranet.home ServerAlias *.home.hometranet.home DocumentRoot /www/home/html TransferLog /www/home/logs/access_log ErrorLog /www/home/logs/error_log </VirtualHost> y una entrada en el fichero de nombres de zona. *.home.hometranet.home. IN A 192.168.1.1 Nota: este truco no funciona si utilizamos Microsoft DNS Server. Aparentemente, no deja usar wildcards en los nombres de host.
(Pero no lo estás usando, verdad??)
Una vez escribí un pequeño sistema que permitía que los usuarios de una red añadieran su CV en una base de datos y, usando el truco anterior, sus CVs estaban disponibles en las direcciones http://theirUserName.cv.developer.ch.

Mi fichero de configuracion de hosts virtuales

Aquí está un fichero un poco más exhaustivo que he separado de mi fichero httpd.conf principal.
Este es el que tengo actualmente en mi servidor.

PAra incluir este fichero en el httpd.conf principal puedes usar la directiva Include en el httpd.conf.
Include "/etc/vhosts.conf"

Rescursos Adicionales

[Apache name-based Virtual Host Support]
http://www.apache.org/docs/vhosts/name-based.html
[Apache Virtual Host documentation]
http://www.apache.org/docs/vhosts/index.html
[An In-Depth Discussion of Virtual Host Matching]
http://www.apache.org/docs/vhosts/details.html