Cómo instalar Nginx en Debian 10 Buster

Cómo instalar Nginx en Debian 10 Buster

En esta ocasión vamos a describir el proceso de cómo instalar Nginx en Debian 10 Buster paso a paso, ya que este servidor web es una gran opción para sacarle el mayor partido posible a tu servidor o VPS Debian. Al final de esta guía habrás instalado y configurado Nginx, incluyendo servidores virtuales y acceso cifrado mediante el protocolo HTTPS.

Antes de instalar Nginx en Debian 10

Para poder seguir los pasos de esta guía de instalación de Nginx en Debian 10 Buster necesitas cumplir una serie de requisitos:

  • Una máquina Debian 10 actualizada.
  • Conexión a Internet.
  • Acceso por consola como root o un usuario con permisos de sudo.

Cómo instalar Nginx en Debian 10

Para instalar Nginx en Debian 10 Buster usaremos el repositorio de la propia distribución. Por tanto, uno de los primeros pasos será actualizar la información de los paquetes disponibles en el repositorio:

~$ sudo apt update

Ya tenemos actualizada la información de los repositorios de Debian 10, así que es el momento de instalar el paquete nginx con apt:

~$ sudo apt -y install nginx

Tras la instalación del paquete y sus dependencias se crea un nuevo servicio llamado nginx.service o nginx en su versión corta. Este servicio queda activado para arrancar automáticamente con el sistema y también se ha iniciado al finalizar la instalación, como puedes comprobar con el comando systemctl status nginx:

como instalar nginx en debian 10 buster

En el caso de tener activado el firewall UFW en Debian 10, si quieres acceder al servicio web desde red será necesario añadir algunas reglas.

Para el servicio estándar HTTP (puerto 80/TCP):

~$ sudo ufw allow http

Y si vas a servir contenido seguro, mediante HTTPS (puerto 443/TCP):

~$ sudo ufw allow https

Acceder a Nginx en Debian 10

Ahora ya es posible acceder a la página web por defecto de Nginx a través de un navegador web en local o desde otra máquina. Como URL introducimos la dirección IP de la máquina Debian 10, o su dominio:

instalar nginx en debian 10 buster

En este ejemplo se ha accedido desde otra máquina de la red local usando como URL el nombre de la máquina Debian 10 asignado durante la instalación (dominio principal).

Cómo configurar Nginx en Debian 10

Para configurar Nginx en Debian 10 Buster debes tener en cuenta que los archivos de configuración se encuentran bajo la ruta /etc/nginx/, siendo el archivo de configuración principal /etc/nginx/nginx.conf.

Dentro de este archivo se cargan explícitamente algunos archivos de configuración adicionales, y también se indican directorios de los que también se cargarán las configuraciones almacenadas en los archivos que contengan.

Por ejemplo, se incluye el directorio /etc/nginx/modules-enabled/ donde se enlazan los archivos de los módulos que se desean configurar para el servicio. También se incluyen configuraciones adicionales en /etc/nginx/conf.d/ y los distintos servidores virtuales en /etc/nginx/sites-enabled/.

Servidores virtuales de Nginx en Debian 10

En Debian 10 la configuración de servidores virtuales de Nginx es sencilla y práctica. Puedes crear archivos de configuración individuales para cada servidor virtual y guardarlos en la carpeta /etc/nginx/sites-available/, donde podrás modificarlos cada vez que lo necesites. Para que Nginx tome en cuenta estas configuraciones debes crear un enlace simbólico en la carpeta /etc/nginx/sites-enabled/ al archivo de configuración del servidor virtual. Nginx sólo tiene en cuenta los enlaces simbólicos de sites-enabled/, no los archivos de sites-available/.

De hecho, la página web que acabamos de visitar es ofrecida por el servidor virtual por defecto, cuya configuración se encuentra en el archivo /etc/nginx/sites-available/default y como es lógico se carga gracias a su enlace simbólico /etc/nginx/sites-enabled/default.

Cómo crear un nuevo servidor virtual de Nginx en Debian 10

Para configurar un servidor virtual de Nginx en Debian 10 necesitas tener configurado un dominio con el que trabajará este nuevo servidor virtual. El dominio debe poder resolverse con la dirección de la máquina Debian 10 en la que corre Nginx.

Para poder configurar servidores virtuales de Nginx en Debian 10 Buster accesibles desde Internet habrá que tener registrados y configurados estos dominios en un servicio profesional como Namecheap:

Search and buy domains from Namecheap. Lowest prices!

En el caso de una red local deberían estar configurados en el servicio DNS local.

Vamos a crear un servidor virtual para el dominio debian10mania.lan, además del dominio local (debian10.local.lan) de la máquina Debian 10 de este ejemplo. Tenemos configurado este nuevo dominio apuntando ya al servidor Debian 10, por tanto si accedemos con este dominio como URL a través de un navegador obtendremos la página web por defecto:

Servidores virtuales de Nginx en Debian 10 Buster

Esto es así porque cualquier petición que pueda atender Nginx es recogida por el servidor virtual por defecto si no existe otro servidor virtual configurado para ese dominio.

En este momento el dominio debian10mania.lan no está configurado para ningún servidor virtual específico, así que responde el servidor por defecto. Y esto es lo que vamos a cambiar.

Creando el contenido del servidor virtual

En primer lugar crearemos algo de contenido web. Los archivos web del servidor por defecto se encuentran en la ruta /var/www/html/, por lo que /var/www/ puede ser un buen sitio para alojar nuestro contenido. Puedes crear una carpeta y colocar tus archivos si ya los tienes. En este ejemplo crearemos la carpeta:

~$ sudo mkdir /var/www/debian10mania.lan
~$ sudo chown $USER:$USER /var/www/debian10mania.lan/

El segundo comando cambia el propietario de esta carpeta a nuestro propio usuario, para poder trabajar en esa ruta sin usar sudo.

Ahora creamos el archivo HTML que se sirve por defecto en la mayoría de servidores web, index.html:

~$ nano /var/www/debian10mania.lan/index.html

Como contenido del archivo bastará un simple mensaje de bienvenida:

<h1>Bienvenidos a debian10mania.lan</h1>
<small>Servido por Nginx</small>

Ahora pasaremos a crear la configuración del nuevo servidor virtual.

Configurando el nuevo servidor virtual

En virtud de la estructura de archivos de configuración que hemos visto, debemos crear un nuevo archivo en /etc/nginx/sites-available/:

~$ sudo nano /etc/nginx/sites-available/debian10mania.lan.conf

La configuración mínima podría ser algo así:

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

        server_name debian10mania.lan;

        root /var/www/debian10mania.lan;
        index index.html;

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

        access_log /var/log/nginx/debian10mania.lan-access.log;
        error_log /var/log/nginx/debian10mania.lan-error.log;
}

Se trata de un bloque server dentro del cual se incluyen las directivas y otros bloques necesarios.

Tenemos dos directivas listen para IPv4 e IPv6 que especifican el puerto 80, el estándar del servicio HTTP.

La directiva server_name es la que especifica el dominio al que se asocia el servidor virtual.

La ruta del contenido web del servidor virtual se indica en la directiva root.

En la directiva index enumeramos todos los nombres de archivo que deberian ser considerados índice o archivos por defecto que se sirven cuando la URL no especifica un archivo concreto. Los típicos son index.html, index.htm, default.html, index.php, etc.

El bloque location sirve para aplicar configuraciones concretas dentro de la ruta del contenido web. En este caso la directiva try_files indica que una URL debe ser resuelta en primer lugar como archivo, en caso de fallo como directorio y por último debe devolverse el códido de error 404.

Las dos directivas finales, acces_log y error_log especifican los registros de eventos de acceso y error en archivos propios para el servidor virtual. Si no se especifican estos archivos, los registros se guardarán en los logs por defecto de Nginx (indicados en nginx.conf).

Guardados los cambios tenemos que hacer que Nginx tome en cuenta el nuevo servidor virtual, esto es, crear el enlace simbólico dentro de sites-enabled/:

~$ sudo ln -s /etc/nginx/sites-available/debian10mania.lan.conf /etc/nginx/sites-enabled/

Con el enlace creado, ya podemos recargar la configuración de Nginx:

~$ sudo systemctl reload nginx

Ahora la configuración de nuestro nuevo servidor virtual forma parte de toda la configuración de Nginx, por lo que podemos volver a acceder al servidor virtual exactamente de la misma forma que intentamos anteriormente:

Configurar servidor virtual de Nginx en Debian 10 Buster

 

Ahora, en lugar de la página del servidor virtual por defecto, obtenemos la página que hemos creado para nuestro servidor virtual.

Configuración HTTPS con certificados SSL

Teniendo en cuenta la forma en que se configuran los distintos servidores de Nginx en Debian 10, para usar el protocolo seguro HTTPS simplemente añadiremos algunas líneas en el archivo de configuración del servidor virtual correspondiente.

Con los certificados SSL asociados al dominio en cuestión instalados en nuestro sistema Debian 10, procedemos a incluirlos en la configuración.

Para un servidor Debian 10 con Nginx sirviendo contenido en Internet es importante utilizar certificados firmados por autoridades certificadoras como Namecheap:

SSL Certificate for just $8.88 with Namecheap

Para un servidor en pruebas o en red local podremos usar certificados autofirmados, como veremos más adelante.

Como ejemplo, usaremos el servidor virtual por defecto de Nginx en Debian 10, que responde al dominio que se especificó durante la instalación del propio sistema Debian 10 (debian10.local.lan).

Editamos el archivo de configuración del servidor virtual por defecto:

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

Este archivo de configuración tiene muchísimos comentarios y directivas desactivadas mediante caracteres # al inicio de línea (lo que las convierte en comentarios). Así que básicamente se trata de buscar las directivas necesarias, alterar sus valores y activarlas eliminando dicho carácter # inicial.

Esto es lo que tenemos que buscar:

...
        # SSL configuration
        #
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;
        #
        # Note: You should disable gzip for SSL traffic.
        # See: https://bugs.debian.org/773332
        #
        # Read up on ssl_ciphers to ensure a secure configuration.
        # See: https://bugs.debian.org/765782
        #
        # Self signed certs generated by the ssl-cert package
        # Don't use them in a production server!
        #
        # include snippets/snakeoil.conf;
...

Y los cambios consistirán en descomentar las dos directivas listen que usan la opción ssl en el puerto 443, y la línea que incluye una configuración específica para los certificados autofirmados Snakeoil que instalaremos enseguida.

Quedaría así:

...
        listen 443 ssl default_server;
        listen [::]:443 ssl default_server;

        include snippets/snakeoil.conf;
...

Guardados los cambios, pasamos a preparar los certificados SSL. Los certificados Snakeoil se obtienen al instalar el paquete ssl-cert en el sistema:

~$ sudo apt install -y ssl-cert

Tras la instalación del paquete ssl-cert se generan certificados autofirmados para el nombre de máquina y dominio del sistema, y cuya configuración se incluye a través de la directiva include anteriormente activada.

Si queremos usar certificados firmados o cualquier tipo de certificados procedentes de otra fuente, en lugar de cargar el archivo snakeoil.conf incluiremos las directivas ssl_certificate y ssl_certificate_key, especificando las rutas del sistema donde se encuentran la clave privada y el certificado público:

...
        listen 443 ssl default_server;
        listen [::]:443 ssl default_server;

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

Se trate del caso que se trate, ya podemos recargar la configuración de Nginx:

~$ sudo systemctl reload nginx

Y acceder al servidor virtual con el dominio por defecto usando https:// en lugar de http:// en la URL:

seguridad ssl para nginx en debian 10 buster

Tras pasar un aviso de seguridad accedemos al servidor virtual mediante protocolo HTTPS (puerto 443). El navegador nos informa de que la conexión no es segura, ya que al tratarse de certificados autofirmados no se puede comprobar la autenticidad de los mismos (no hay autoridades certificadoras involucradas).

Si dispones de certificados para el dominio de algún otro servidor virtual, la configuración sería similar, indicando las rutas de dichos certificados y eliminando de las directivas listen el parámetro default_server.

En este caso, en la configuración del servidor virtual adicional incluiríamos dentro del bloque server algo como esto:

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

        ssl_certificate /etc/ssl/certs/debian10mania.lan-cert.pem;
        ssl_certificate_key /etc/ssl/private/debian10mania.lan-key.pem;
...

Recuerda recargar la configuración de Nginx tras cada nuevo ajuste.

https para nginx en debian 10 buster

Conclusión

Ahora que sabes cómo instalar y configurar Nginx en Debian 10 puedes configurar tantos servidores virtuales como necesites, con seguridad SSL cuando sea necesario. De esta forma puedes ofrecer distintos sitios y aplicaciones web con sus propios dominios.

Si tienes dudas, preguntas, sugerencias, etc. puedes dejarme un comentario.

¡Apoya este sitio!

Si te ha resultado interesante esta guía sobre la instalación y configuración de Nginx en Debian 10 y quieres agradecérmelo, tienes varias opciones…

Como invitarme a un café:

 

O dejar una propina desde PayPal:

¡Gracias!

 

1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (4 votos, promedio: 5,00 de 5)
Cargando…

Deja una respuesta