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:
- 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.