Carlos Robles frikiblog

Registros CNAME, un dominio como alias de otro

| 1 Comment

Con cierta frecuencia se me plantea una situación que requiere utilizar registros CNAME, y no siempre puede ser del todo intuitivo. Una de las situaciones es cuando una empresa que revende un servicio, ofrece a sus clientes un webservice que en realidad esta en un dominio de otra empresa, y logicamente se prefiere que el cliente no sea consciente.

Para solucionarlo, se pueden hacer varias cosas, pero la manera mas rapida, mas fiable y mas limpia es crear un registro CNAME.

Por ejemplo, si queremos que nuestros clientes accedan a http://proveedor.com/dir/app.cgi y nosotros tenemos un dominio, reseller.com, como no queremos redirigir el dominio entero, pues nos inventamos un subdominio, por ejemplo webservice.reseller.com,  que sea un alias del dominio del proveedor. Al hacer un alias, en lugar de una redirección por cualquier otro metodo, conseguirmos que todo el arbol de archivos sea equivalente, es decir

http://webservice.reseller.com/ apuntaria a http://proveedor.com/
y automaticamente
http://webservice.reseller.com/dir/app.cgi apuntaria a http://proveedor.com/dir/app.cgi

Para tener todo esto de un plumazo, lo unico que hay que hacer es ir al panel de administracion de DNS (en PLESK,  dominio > Sitio Web > Ajustes DNS ) y crear un registro CNAME que apunte webservice.reseller.com a proveedor.com.

Esperamos un poco a que se refresquen la cachés DNS… y ya podemos decir a nuestros clientes que utilizen la direccion http://webservice.reseller.com/dir/app.cgi, con la misma limpieza que si el recurso existiese físicamente.

¿No funciona?

Esto es en realidad la motivacion del post. De hecho, si apuntamos a un dominio en otra máquina, y a un dominio sin IP fija, lo mas normal es que no funcione. ¿Por qué?

Cuando tenemos una IP que aloja distinos dominios, en nuestro servidor lo que tenemos es una lista de Hosts Virtuales. Cuando alguien desde un navegador escribe un nombre de dominio…se busca en los servidores de nombre que correspondan la IP asociada a ese dominio, y despues se hace una peticion a esa IP, incluyendo una cabecera “Host“, que le dice al software de servidor que dominio es el que se está buscando en realidad.

Al utilizar registros CNAME, en un NS distinto, pues es logico pensar que el servidor de destino recibe una peticion que no entiende, porque si, la IP es la que es, pero no tiene muy claro que es lo que se le pide.  Pues bien, tenemos que explicarle tambien al servidor de destino lo que esta pasando.

Esto en Apache lo hacemos con la directiva ServerAlias. Pero tiene que ser en el archivo de configuracion del dominio, no sirve en un htaccess. Para ello, buscamos el archivo de configuración. Si trabajamos con PLESK, buscaremos en nuestro servidor en la ruta /var/www/vhosts/dominio.com/conf/vhost.conf
o si es un subdominio /var/www/vhosts/dominio.com/subdomains/subdomain/conf/vhost.conf

Dentro encontraremos probablemente unas cuantas directivas VirtualHost, con la configuracion de cada dominio alojado en esa IP, por ejemplo:

<VirtualHost *:80>
ServerName host.example.com

[...]
</VirtualHost>

Pues buscamos la que tenga en ServerName el nombre de dominio que nos interesa, proveedor.com y sencillamente añadimos, en otra linea

ServerAlias webservice.reseller.com

que le dice al servidor justo lo que queremos, que trate a ese dominio falso, exactamente como trataria al real. en nuestro ejemplo quedaria, por ejemplo, asi:

<VirtualHost *:80>
ServerName proveedor.com
ServerAlias webservice.reseller.com
</VirtualHost>

Guardamos, y reiniciamos el servidor. Et Voila!

Si necesitamos esto con cierta frecuencia, es interesante saber que la directiva ServerAlias admite wildcards, por lo que podemos porner un ServerAlias de la forma

ServerAlias *.reseller.com

y funcionara con cualquier CNAME que exista o que creemos en adelante con forma de subdominio de reseller.com. Tambien podemos poner en también se puede incluir dentro del mismo VirtualHost más de un ServerAlias, por ejemplo:

ServerAlias *.reseller.com
ServerAlias reseller2.com

Podemos saber mas sobre hosting vitual basado en nombres en http://httpd.apache.org/docs/2.0/vhosts/name-based.html

Facebook Twitter Linkedin Plusone Digg Delicious Reddit Email

One Comment

  1. Pingback: Añadir www a un subdominio

Leave a Reply

Required fields are marked *.