Cómo instalar Nginx en Debian 11 Bullseye

En este artículo veremos cómo instalar y configurar el servidor web Nginx en Debian 11 Bullseye paso a paso, de tal modo que puedas servir contenido web desde tu servidor o VPS Debian tanto en red local como a través de Internet.

Antes de instalar Nginx en Debian 11 Bullseye

Para poder seguir los pasos de esta guía de instalación y configuración de Nginx en Debian 11 Bullseye sólo necesitarás cumplir los siguientes requisitos básicos:

  • Un sistema Debian 11 Bullseye actualizado.
  • Un usuario con permisos de sudo.
  • Acceso a Internet.

Como seguramente ya cumples todos estos requerimientos, es hora de regular la altura de tu escritorio, abrir una consola y empezar el trabajo.

Cómo instalar Nginx en Debian 11

Vamos a instalar Nginx en Debian 11 Bullseye desde los repositorios de la distribución, así que el primer paso será actualizarlos:

~$ sudo apt update

El paquete que necesitamos es nginx, que instalaremos con apt:

~$ sudo apt install -y nginx

Una vez descargado e instalado Nginx y sus dependencias se crea un nuevo servicio en Debian 11, el servicio nginx o nginx.service, que queda en ejecución y habilitado para iniciar automáticamente.

Podemos comprobar el estado del servicio con el comando systemctl:

~$ systemctl status nginx

como instalar nginx en debian 11 bullseye

Versión instalada de Nginx

Si necesitas saber qué versión de Nginx está corriendo en Debian 11 puedes averiguarlo fácilmente desde consola con el comando nginx:

~$ sudo nginx -v
nginx version: nginx/1.18.0

Configuración del firewall

En caso de tener activado el firewall UFW de Debian 11 Bullseye será necesario añadir las reglas adecuadas para permitir las conexiones desde red.

Para las conexiones HTTP estándar:

~$ sudo ufw allow http

Y para las conexiones seguras HTTPS:

~$ sudo ufw allow https

Acceder a Nginx en Debian 11

Ya podemos acceder a Nginx en Debian 11 desde un navegador, para lo que indicaremos la dirección del servidor (IP, nombre DNS, dominio, localhost en caso de tratarse de la máquina local, etc.). Inicialmente sólo dispondremos del protocolo HTTP.

Por ejemplo, la máquina Debian 11 que hemos usado para preparar esta guía es accesible en el subdominio debian11.local.lan, así que usaremos http://debian11.local.lan como URL.

como instalar el servidor web nginx en debian 11 bullseye

Cómo configurar Nginx en Debian 11

A la hora de configurar Nginx en Debian 11 Bullseye hay que tener en cuenta que sus archivos de configuración se encuentran organizados bajo la ruta /etc/nginx/, siendo nginx.conf el archivo principal desde el que se incluye el resto.

Muchos de estos archivos se organizan en subdirectorios. En el caso de aquellos relacionados con la configuración de módulos y servidores virtuales, estos archivos se encuentran físicamente en subdirectorios cuyo nombre termina en -available, existiendo subdirectorios con el mismo nombre terminado en -enabled, donde sólo existen enlaces simbólicos a los archivos del correspondiente directorio -available.

Nginx sólo carga los archivos de los diretorios -enabled, es decir, sólo carga los archivos de configuración enlazados. De esta forma activar o desactivar un módulo o un sitio virtual es tan fácil como crear o borrar un enlace simbólico, sin perder el archivo de configuración original.

El sitio web por defecto está configurado a través del archivo sites-available/default, del que existe a su vez un enlace simbólico sites-enabled/default. En este archivo existe una directiva root que indica que el contenido web reside en /var/www/html, así que si quieres mostrar tu propia web debes eliminar el contenido de dicho directorio y copiar tus archivos.

Servidores virtuales de Nginx en Debian 11

Para configurar servidores virtuales de Nginx en Debian 11 y así poder mostrar distintos sitios web a través de distintos dominios, el primer paso será tener registrados y configurados dichos dominios apuntando al servidor.

En el caso de redes locales los dominios deberán estar configurados en el servidor DNS local, pero si se trata de un servicio Nginx corriendo en un servidor o VPS Debian 11 en Internet será necesario registrar los dominios a través de algún servicio profesional como Namecheap (que es donde registramos nuestros dominios).

En este tutorial usaremos el subdominio debian11.local.lan para el sitio web por defecto (el que hemos visitado anteriormente) y el dominio ficticio debianweb.com para un servidor virtual adicional. Dichos dominios están configurados y apuntan al servidor Debian 11:

como configurar nginx en debian 11 bullseye

Quizás hayas observado que en realidad el sitio web por defecto, configurado en sites-available/default, se comporta como un servidor virtual, y efectivamente así es.

Crearemos el archivo de configuración para el nuevo servidor virtual en el mismo subdirectorio:

~$ sudo nano /etc/nginx/sites-available/debianweb.com

El contenido básico de este archivo será un bloque server similar al siguiente:

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

        server_name debianweb.com;

        root /var/www/debianweb.com;

        index index.html;

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

Este bloque contiene directivas como:

  • listen, que indica el puerto y protocolo a usar, en este caso IPv4 e IPv6 sobre el puerto 80 (el estándar HTTP).
  • server_name, el dominio al que responderá el servidor virtual.
  • root, el directorio donde se organiza el contenido web.
  • index, el archivo por defecto que se ofrece cuando no se especifica ninguno.
  • location, un bloque en el que se puede configurar el comportamiento de Nginx dentro del directorio especificado (relativo a la ruta indicada en root).

Guardamos el archivo y creamos un enlace simbólico desde el subdirectorio sites-enabled/:

~$ sudo ln -s /etc/nginx/sites-available/debianweb.com /etc/nginx/sites-enabled/

Podemos comprobar que la configuración es correcta con el comando nginx:

~$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Vamos a crear algo de contenido en la ruta de archivos web que hemos configurado, creando el directorio raíz especificado en la configuración anterior:

~$ sudo mkdir /var/www/debianweb.com

Y creando un archivo index.hml dentro de este directorio:

~$ sudo nano /var/www/debianweb.com/index.html

El contenido de este archivo será cualquier mensaje que nos permita identificar fácilmente el nuevo sitio web:

<h1>Bienvenidos a debianweb.com</h1>
<small>Powered by Nginx</small>

Una vez guardado el archivo ya podemos aplicar la nueva configuración haciendo que Nginx la cargue:

~$ sudo systemctl reload nginx

Si ahora visitamos los sitios web comprobaremos que cada dominio muestra un contenido diferente, es decir, los servidores virtuales están haciendo su trabajo:

configurar servidores virtuales de nginx en debian 11 bullseye

Así de sencillo.

Añadir más servidores virtuales es tan fácil como configurar los dominios, crear los archivos de configuración, añadir el contenido web y actualizar la configuración.

Seguridad SSL con HTTPS para Nginx en Debian 11

Si necesitas ofrecer conexiones seguras a tus visitantes será necesario utilizar seguridad SSL para poder utilizar el protocolo HTTPS en el servicio Nginx del servidor Debian 11. Las conexiones se cifran usando claves de cifrado que tienen asociados certificados.

Para crear todos los archivos necesarios usaremos el comando openssl de Debian 11. Este comando, como veremos a continuación, es interactivo y solicita cierta información pública para incorporar al certificado. De toda esta información es muy importante que el apartado «Common Name» contenga el dominio del sitio web que usará el certificado.

Por ejemplo, para el sitio web por defecto de este tutorial:

...
Common Name (e.g. server FQDN or YOUR name) []:debian11.local.lan
...

Y para el servidor virtual adicional:

...
Common Name (e.g. server FQDN or YOUR name) []:debianweb.com
...

SSL para sitios en Internet

En el caso de un servicio web disponible desde Internet estos certificados deben estar firmados por autoridades certificadoras como Namecheap:

SSL Certificate for just $8.88 with Namecheap

Generaremos el archivo de clave de cifrado y un archivo CSR (solicitud de firma de certificado) con el comando openssl, indicando como parámetros las rutas donde se guardarán dichos archivos:

~$ sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/ssl/private/debian11.local.lan.key -out debian11.csr

La clave queda instalada en el directorio /etc/ssl/private/ a la espera de disponer del certificado, mientras que en el directorio de trabajo se crea el archivo CSR que se usa para solicitar el certificado firmado. Normalmente lo que se envía al servicio de certificación es el contenido del archivo CSR, que se puede consultar desde consola:

~$ cat debian11.csr
-----BEGIN CERTIFICATE REQUEST-----
MIICpzCCAY8CAQAwYjELMAkGA1UEBhMCRVMxEzARBgNVBAgMClNvbWUtU3RhdGUx
...
niUxWVuvf9xqa+s=
-----END CERTIFICATE REQUEST-----

Una vez obtenido el certificado firmado, puede instalarse en la ruta /etc/ssl/certs/.

Otro tanto haríamos para solicitar el certificado para el servidor virtual adicional:

~$ sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/ssl/private/debianweb.com.key -out debianweb.csr

Seguiríamos el mismo procedimiento.

SSL para uso local

En caso de un servicio en pruebas, red local, etc. puedes usar un certificado autofirmado generado durante la creación de la clave de cifrado usando el comando openssl.

Creamos clave y certificado para el sitio web por defecto, indicando como parámetros las rutas donde se guardarán dichos archivos:

~$ sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/ssl/private/debian11.local.lan.key -x509 -days 3650 -out /etc/ssl/certs/debian11.local.lan.crt

Realizaremos la misma operación para el servidor virtual adicional:

~$ sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/ssl/private/debianweb.com.key -x509 -days 3650 -out /etc/ssl/certs/debianweb.com.crt

Configuración SSL

Con las claves y certificados ya instalados es el momento de configurar las conexiones SSL.

Comenzamos con el servidor web por defecto, editando su archivo de configuración:

~$ sudo nano /etc/nginx/sites-available/default

Buscaremos esta sección dentro del bloque server principal:

...
        # SSL configuration
        #
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;
...

Activaremos las dos directivas listen que configuran el puerto y el protocolo eliminando el carácter # inicial, y añadiremos dos directivas que carguen el certificado y la clave de cifrado:

...
        # SSL configuration
        #
        listen 443 ssl default_server;
        listen [::]:443 ssl default_server;

        ssl_certificate /etc/ssl/certs/debian11.local.lan.crt;
        ssl_certificate_key /etc/ssl/private/debian11.local.lan.key;
...

Guardamos el archivo y editamos el del servidor virtual adicional:

~$ sudo nano /etc/nginx/sites-available/debianweb.com

Añadiremos las directivas listen (sin el parámetro default_server) y SSL correspondientes:

server {
...
        listen 443 ssl;
        listen [::]:443 ssl;

        ssl_certificate /etc/ssl/certs/debianweb.com.crt;
        ssl_certificate_key /etc/ssl/private/debianweb.com.key;
...

Guardamos los cambios y comprobamos que la configuración sea correcta:

~$ sudo nginx -t

Si todo está correcto, recargamos la configuración del servicio web:

~$ sudo systemctl reload nginx

Y ya podemos visitar las versiones seguras de nuestros sitios web, sustituyendo el protocolo HTTP por HTTPS.

Por ejemplo, los sitios web de este tutorial tendrían ahora https://debian11.local.lan y https://debianweb.com como URLs.

En el caso de utilizar certificados autofirmados el navegador mostrará un aviso informando de que no puede verificar la validez de dichos certificados:

Habrá que confirmar que deseamos continuar con la conexión, de modo que el navegador añadirá una excepción que recordará en próximas conexiones. Sin embargo, de algún modo u otro seguirá mostrando información sobre la no fiabilidad de los certificados:

configurar seguridad ssl en nginx sobre debian 11 bullseye

Obviamente, si usas certificados firmados no se producirá ningún tipo de aviso.

Conclusión

Ahora que sabes cómo instalar el servidor web Nginx en Debian 11 Bullseye ya puedes desplegar tu propio sitio web fácilmente, ofreciendo conexiones seguras SSL y aprovechando toda la potencia de tu servidor o VPS a través de los servidores virtuales, con los que podrás alojar varios sitios web en la misma máquina.

Si ya puedes ofrecer contenido web gracias a esta pequeña guía y quieres agradecérnoslo, cualquier mínima contribución aporta mucho al mantenimiento de este sitio y la creación de más y mejores tutoriales.

Puedes ayudarnos dejando tan sólo 1 $ de propina desde PayPal:

O, si te sientes especialmente agradecido, puedes invitarnos a un café:

¡Gracias!

Deja un comentario

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información

ACEPTAR
Aviso de cookies