Los virtualhosts permiten mostrar diferentes páginas según el dominio desde al que estemos accediendo al servidor. Para configurarlo debemos de tener lo siguiente:

  • NGINX instalado (para instalarlo podemos seguir este tutorial).
  • Un dominio apuntando a nuestro servidor (para probarlo en local podemos usar un servidor DNS propio o modificar el archivo hosts).

Primero de todo creamos directorios para los dominios

sudo mkdir -p /var/www/sitio1.com/html
sudo mkdir -p /var/www/sitio2.com/html

Damos permiso al usuario con el que estemos logeados a poder modificar esos dos directorios

sudo chown -R $USER:$USER /var/www/sitio1.com/html
sudo chown -R $USER:$USER /var/www/sitio2.com/html

Ponemos los permisos apropiados para /var/www

sudo chmod -R 755 /var/www

Creamos páginas para probar que todo funcione, para ello creamos dos html: uno en /var/www/sitio1.com/html/ y otro en /var/www/sitio2.com/html/

Cuando ya tengamos creados dos html, procedemos a crear los virtualhosts. Para ello copiamos el host default de nginx:

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/sitio1.com

Y lo editamos con:

sudo nano /etc/nginx/sites-available/sitio1.com

Lo abrimos y veremos la configuración del host, para que funcione correctamente con nuestro host hemos de cambiar unas cuantas líneas y añadirle el dominio y la ruta que estamos usando. Lo dejaríamos de esta manera.

server {
        listen 80;
        listen [::]:80;

        root /var/www/sitio1.com/html;
        index index.html index.htm index.nginx-debian.html;

        server_name sitio1.com www.sitio1.com;

        location / {
                try_files $uri $uri/ =404;
        }
}

Haríamos lo mismo que hemos hecho para este host con el siguiente (cambiando las rutas y el dominio).

Después de esto, los habilitamos con un enlace simbólico a /etc/nginx/sites-enabled/

sudo ln -s /etc/nginx/sites-available/sitio1.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/sitio2.com /etc/nginx/sites-enabled/

Se recomienda cambiar un parametro en la configuración de NGINX para no tener problemas de memoria, para ello editamos /etc/nginx/nginx.conf y cambiamos:

http {
    . . .

    server_names_hash_bucket_size 64;

    . . .
}

Comprobamos que no hay errores en la configuración

sudo nginx -t

Y reiniciamos el servicio

sudo systemctl restart nginx

Ya debería de funcionar.