Lo que se pretende es conseguir una manera rápida y sencilla de poner sitios web online. Una vez configurado el servidor web y el servidor DNS, lo único que tendremos que hacer para tener accesible un nuevo sitio web será colocarlo en un directorio concreto del servidor y podremos acceder a él a través del subdominio con el nombre del directorio. Por ejemplo, si creamos la web web1, automáticamente será accesible desde web1.example.com.

En mi caso concreto, dado que el dominio que apuntará al servidor será un dominio dinámico (sub.ignaciocano.com), los sitios web serán accesibles a través de un subdominio de éste. Por ejemplo, web1.sub.ignaciocano.com.

Configurar el servidor DNS

Se puede utilizar cualquier servidor DNS que permita comodines (wildcards) para los subdominios de un dominio. Podemos utilizar el servidor DNS de nuestro dominio principal, o un servidor DNS propio. No sé si debe quedar algún servicio gratuito de dominios dinámicos, ya que servicios como DynDNS o No-IP creo recordar que sólo permiten los comodines en su versión de pago. En mi caso, he configurado el servidor DNS de OVH.

En tres sencillos pasos lo tendremos todo listo.

Primero, creamos un nuevo dominio tipo DynHOST. Para ello, vamos a Inicio > Hosting > Dominios & DNS > Zona DNS > campo DynHOST:

  • Subdominio: sub
  • IP de destino: Ponemos la IP del servidor
  • Dejamos marcada la casilla para crear un identificador DynHOST

Tras validar el primer paso, vamos a crear el identificador DynHOST:

  • Identificador: ignaciocano-identificadordeldominio
  • Subdominio: sub.ignaciocano.com
  • Contraseña: ***

Validamos y ya sólo quedará un último paso. Para que el este DynHOST permita subdominios, deberemos crear un registro CNAME. Vamos a Inicio > Hosting > Dominios & DNS > Zona DNS > campo CNAME:

  • Subdominio: *.sub.ignaciocano.com
  • Destino: sub.ignaciocano.com

Validamos y listo.

Configurar el servidor web

Todos los proyectos estarán ubicados a partir de un directorio común: /home/projects/subdomains. Lo que tenemos que hacer es que el servidor utilice el prefijo del dominio para utilizar la raíz del sitio correcta.

Nginx

Configurar Nginx para que cualquier subdominio apunte a un directorio concreto es sencillo. Creamos un fichero de configuración para el dominio /etc/nginx/sites-available/sub.ignaciocano.com:

server {
    listen 80;
    server_name
        sub.ignaciocano.com
        ~^([^.]+)\.sub\.ignaciocano\.com
        ;
    access_log /var/log/nginx/access.sub.ignaciocano.com.log;
    if ($host ~* ^([^.]+)\.sub\.ignaciocano\.com$) {
        set $subdomain $1;
    }
    root /home/projects/subdomains/$subdomain/;
}

Sólo resta activar el sitio y reiniciar el servidor.

Apache

Hacer lo propio en Apache es también sencillo. Podemos utilizar mod_rewrite:

ServerName sub.ignaciocano.com
ServerAlias *.sub.ignaciocano.com
RewriteEngine On
RewriteCond %{HTTP_HOST} ^([^\.]+)\.sub\.ignaciocano\.com
RewriteCond /home/projects/subdomains/%1 -d
RewriteRule ^(.*) /%1/$1 [L]

O bien vhost_alias, el cual lo simplifica aún más:

ServerName sub.ignaciocano.com
ServerAlias *.sub.ignaciocano.com
VirtualDocumentRoot /home/projects/subdomains/%1

Actualizado el 14 de febrero de 2015

Si queremos que las conexiones a estos subdominios sean seguras, una opción es crear un certificado con wildcard pero en lugar de hacerlo para el dominio principal, lo debemos hacer para el primer subdominio. En este caso, al crear la petición de firmado, en el campo Common Name deberemos poner *.sub.ignaciocano.com.

Hay que tener en cuenta que un certificado con wildcard para el dominio de primer nivel (*.ignaciocano.com), no se puede utilizar para estos subdominios de un subdominio, o de lo contrario el navegador nos avisará de que el dominio no coincide con el del certificado:

Matching is performed using the matching rules specified by
[RFC2459]. If more than one identity of a given type is present in
the certificate (e.g., more than one dNSName name, a match in any one
of the set is considered acceptable.) Names may contain the wildcard
character \* which is considered to match any single domain name
component or component fragment. E.g., \*.a.com matches foo.a.com
but not bar.foo.a.com. f\*.com matches foo.com but not bar.com.

Por último, no estaría demás forzar el uso de HTTPS para estos subdominios:

ServerName sub.ignaciocano.com
ServerAlias *.sub.ignaciocano.com
RewriteEngine on
ReWriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L]

Referencias

» Redirect of wildcard subdomain to subfolder » Wildcard subdomain directory names » HTTP over TLS


Entradas relacionadas


Published

Category

admin

Tags

Contacto