Cómo configurar bloques de servidor Nginx en Ubuntu 18.04
Nginx Server Blocks le permite ejecutar más de un sitio web en una sola máquina. Con Server Blocks, puede especificar la raíz del documento del sitio (el directorio que contiene los archivos del sitio web), crear una política de seguridad separada para cada sitio, usar diferentes certificados SSL para cada sitio y mucho más.
En este artículo, proporcionaremos instrucciones paso a paso sobre cómo configurar bloques de servidor Nginx (similar a los hosts virtuales Apache) en Ubuntu 18.04.
Paso 1) Cree un usuario no root con privilegios de sudo configurados
1. Iniciar sesión como root
2. Creando un nuevo usuario
# adduser bobby
3. Concesión de privilegios administrativos
Para agregar estos privilegios a nuestro nuevo usuario, necesitamos agregar el nuevo usuario al grupo sudo. De forma predeterminada, en Ubuntu 18.04, los usuarios que pertenecen al grupo sudo pueden usar el comando sudo.
# usermod -aG sudo bobby
Paso 2) Instale Nginx y configure el firewall
Los paquetes Nginx están disponibles en los repositorios de software predeterminados de Ubuntu. La instalación es bastante sencilla, simplemente escriba los siguientes comandos:
$ sudo apt-get update $ sudo apt-get install nginx
Una vez que se complete la instalación, verifique el estado del servicio escribiendo el siguiente comando:
$ sudo systemctl status nginx
output ● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2018-07-25 13:14:45 UTC; 59s ago Docs: man:nginx(8) Process: 2756 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SU Process: 2747 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, st Main PID: 2762 (nginx) Tasks: 2 (limit: 1112) CGroup: /system.slice/nginx.service ├─2762 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; └─2764 nginx: worker process
Para conocer la versión de Nginx, escriba el siguiente comando:
$ sudo nginx -V
output nginx version: nginx/1.14.0 (Ubuntu) built with OpenSSL 1.1.0g 2 Nov 2017
Nuestro servidor Ubuntu 18.04 está protegido por un firewall, así que tendremos que abrir HTTP (80)
y HTTPS (443)
puertos.
De forma predeterminada, Ubuntu 18.04 viene con una herramienta de configuración de firewall llamada UFW
(Cortafuegos sin complicaciones), por lo que podemos abrir los puertos necesarios con el siguiente comando:
Nota: Nginx Full: este perfil abre el puerto 80 (tráfico web normal no cifrado) y el puerto 443 (tráfico cifrado TLS / SSL)
$ sudo ufw allow 'Nginx Full'
Habilitamos el ufw
:
$ sudo ufw enable
Podemos verificar el cambio con:
$ sudo ufw status
output Status: active To Action From -- ------ ---- Nginx Full ALLOW Anywhere Nginx Full (v6) ALLOW Anywhere (v6)
Ahora podemos abrir http: // dominio_servidor_o_IP en nuestro navegador, y deberíamos poder ver la página de destino predeterminada de Nginx como se muestra a continuación:
Paso 3) Cree la estructura del directorio
La raíz del documento es el directorio donde se almacenan los archivos del sitio web para un nombre de dominio y se sirven en respuesta a las solicitudes. Podemos establecer la raíz del documento en cualquier ubicación que queramos, pero en este artículo usaremos la siguiente estructura de directorio:
/var/www/ ├── domain1.com │ └── images │ └── index.html │ └── style.css ├── domain2.net │ └── images │ └── index.html │ └── style.css
Básicamente crearemos un directorio separado para cada dominio que queramos alojar en nuestro servidor dentro del /var/www
directorio.
Creemos el directorio raíz para nuestros dominios:
$ sudo mkdir -p /var/www/domain1.com
Con fines de prueba, crearemos un directorio de imágenes y archivos index.html, style.css dentro del directorio raíz de documentos del dominio.
$ cd /var/www/domain1.com/
/var/www/domain1.com$ sudo mkdir images index.html style.css
Abra nuestro editor y cree el archivo de demostración:
/var/www/domain1.com/index.html
<!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title>Welcome to domain1.com</title> <link rel="stylesheet" href="https://linoxide.com/ubuntu-how-to/configure-nginx-server-blocks-ubuntu/style.css"/> </head> <body> <h1 style="color:green;text-align:center;">Success! domain1.com home page!</h1> </body> </html>
En este artículo, ejecutamos los comandos como sudo
usuario y los archivos y directorios recién creados son propiedad del root
usuario.
Para evitar problemas de permisos, podemos cambiar la propiedad del directorio raíz del documento del dominio al usuario de Nginx (www-data)
:
$ sudo chown -R www-data: /var/www/domain1.com
haremos los mismos trámites al domain2.net
Paso 4) Cree archivos de bloque del servidor Nginx para cada dominio
Ahora que tenemos el contenido que deseamos servir, necesitamos crear los bloques de servidor que le dirán a Nginx cómo hacer esto.
De forma predeterminada, Nginx contiene un bloque de servidor llamado dfault
que podemos usar como plantilla para nuestras propias configuraciones. Comenzaremos diseñando el bloque de servidor de nuestro primer dominio, que luego copiaremos para nuestro segundo dominio y realizaremos las modificaciones necesarias.
1) Cree el primer archivo de bloque del servidor Nginx
Como se mencionó anteriormente, crearemos nuestro primer archivo de configuración de bloque de servidor copiando el archivo predeterminado:
$ sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/domain1.com
Ahora, abra el nuevo archivo que creó en su editor de texto con privilegios de sudo:
$ sudo nano /etc/nginx/sites-available/domain1.com
Después de editar el archivo, se verá similar a esto:
/etc/nginx/sites-available/domain1.com
server { listen 80; listen [::]:80; root /var/www/domain1.com; index index.html index.htm index.nginx-debian.html; server_name domain1.com www.domain1.com; location / { try_files $uri $uri/ =404; } }
Eso es todo lo que necesitamos para una configuración básica. Guarde y cierre el archivo para salir Ctrl
+ x
.
2) Cree el segundo archivo de bloque del servidor Nginx
Ahora que tenemos nuestra primera configuración de bloque de servidor nginx, podemos usarla como base para nuestro segundo archivo. Cópielo para crear un nuevo archivo:
$ sudo cp /etc/nginx/sites-available/domain1.com /etc/nginx/sites-available/domain2.net
Abra el nuevo archivo con sudo
privilegios en su editor:
$ sudo nano /etc/nginx/sites-available/domain2.net
Ajuste la directiva raíz para que apunte al documento de nuestro segundo dominio root
y ajustar el server_name
para que coincida con el nombre de dominio de su segundo sitio (asegúrese de incluir cualquier alias).
Cuando haya terminado, nuestro archivo probablemente se verá así:
/etc/nginx/sites-available/domain2.net
server { listen 80; listen [::]:80; root /var/www/domain2.net; index index.html index.htm index.nginx-debian.html; server_name domain2.net www.domain2.net; location / { try_files $uri $uri/ =404; } }
Guarde y cierre el archivo para salir Ctrl
+ x
.
Paso 5) Habilite nuestros bloques de servidor Nginx y reinicie Nginx
Ahora que tenemos los archivos de bloqueo de nuestro servidor, debemos habilitarlos. Podemos hacer esto creando enlaces simbólicos desde estos archivos al sites-enabled
directorio, que Nginx lee durante el inicio.
Podemos crear estos enlaces escribiendo:
$ sudo ln -s /etc/nginx/sites-available/domain1.com /etc/nginx/sites-enabled/ $ sudo ln -s /etc/nginx/sites-available/domain2.net /etc/nginx/sites-enabled/
Estos archivos ahora están en el directorio habilitado, ahora tenemos tres bloques de servidor habilitados:
1. dominio1.com: responderá a las solicitudes de dominio1.com y www.dominio1.com
2. dominio2.net: responderá a las solicitudes de dominio2.net y www.dominio2.net
3. predeterminado: responderá a cualquier solicitud en el puerto 80 que no coincida con los otros dos bloques.
Para evitar un posible problema de memoria del cubo de hash que puede surgir al agregar nombres de servidor adicionales, seguiremos adelante y ajustaremos un solo valor dentro de nuestro archivo /etc/nginx/nginx.conf. Abra el archivo ahora:
$ sudo nano /etc/nginx/nginx.conf
Dentro del archivo, busque el server_names_hash_bucket_size
directiva. Eliminar el #
símbolo para descomentar la línea:
/etc/nginx/nginx.conf
http { . . . server_names_hash_bucket_size 64; . . . }
Guarde y cierre el archivo cuando haya terminado.
A continuación, pruebe para asegurarse de que no haya errores de sintaxis en ninguno de nuestros archivos Nginx:
$ sudo nginx -t
Si no se encontraron problemas, reinicie Nginx para habilitar nuestros cambios:
$ sudo systemctl restart nginx
Nginx ahora debería estar sirviendo nuestros dos nombres de dominio.
Paso 6) Vaya a nuestros sitios web
Ahora que estamos todos configurados, deberíamos probar que nuestros bloques de servidor estén funcionando correctamente. Podemos hacerlo visitando los dominios en nuestro navegador web:
http://domain1.com
Debería ver una página que se parece a esto:
Si visita su segundo nombre de dominio, debería ver un sitio ligeramente diferente:
http://domain2.net
Leer también:
Si ambos sitios funcionan, hemos configurado con éxito dos bloques de servidor independientes con Nginx.