marzo 7, 2020

Server Blocks (virtualhosts) en NGINX

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:

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.

  • LinkedIn
  • Tumblr
  • Reddit
  • Google+
  • Pinterest
  • Pocket