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. Este servidor web es una gran opción para sacarle el mayor partido posible a la nueva versión de 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 usuario con permisos de sudo.

Opcionamente podrías necesitar también:

  • Para configurar un servidor virtual necesitarás un dominio apuntando a tu máquina Debian o un dominio local si se trata de tu red local.
  • Certificados SSL para configurar el acceso seguro, correspondientes al dominio del servidor que quieras trabajar con HTTPS.

Cómo instalar Nginx en Debian 10

Para instalar Nginx en Debian 10 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. También es recomendable actualizar los paquetes instalados en el sistema.

Todo ello lo podemos hacer en una sola línea, usando el comando apt:

~$ sudo apt update && sudo apt -y upgrade

Ya tenemos nuestro sistema Debian 10 totalmente actualizado, así que es el momento de instalar el paquete nginx:

~$ 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 systemctl:

~$ systemctl status nginx
● 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 Sun 2019-07-14 14:50:33 CEST; 1h 53min left
     Docs: man:nginx(8)
  Process: 308 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
  Process: 354 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
 Main PID: 361 (nginx)
    Tasks: 2 (limit: 1150)
   Memory: 13.3M
   CGroup: /system.slice/nginx.service
           ├─361 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           └─363 nginx: worker process

Por tanto 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

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

Cómo configurar Nginx en Debian 10

Para configurar Nginx en Debian 10 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á 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 /etc/nginx/sites-enabled/.

Servidores virtuales de Nginx en Debian 10

Para configurar un servidor virtual de Nginx en Debian 10 necesitas el 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 en la que corre Nginx.

En Debian 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 cómo 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

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

servidores virtuales de nginx en debian 10

Esto es así porque cualquier petición que pueda atender Nginx es atendida por el servidor virtual por defecto si no es podida atender por un servidor virtual específico.

En este momento blog.debian10.local no puede ser atendida por 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/blog.debian10.local
~$ sudo chown $USER:$USER /var/www/blog.debian10.local/
~$

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/blog.debian10.local/index.html

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

<h1>Bienvenidos a blog.debian10.local</h1>

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/blog.debian10.local.conf

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

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

        server_name blog.debian10.local;

        root /var/www/blog.debian10.local;
        index index.html;

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

        access_log /var/log/nginx/blog.debian10.local-access.log;
        error_log /var/log/nginx/blog.debian10.local-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 estándar del servicio HTTP 80.

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/blog.debian10.local.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

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.

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.

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 iniciales # (lo que las convierte en comentarios). Así que básicamente se trata de buscar las directivas necesarias, alterar sus valores y activarlas eliminando el 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 que tenemos que hacer consisten 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í:

...
        # 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;
...

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.

Ahora ya podemos recargar la configuración de Nginx y acceder al servidor virtual con el dominio por defecto usando https:// en lugar de http://.

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 firmados por autoridades de certificación para el dominio correspondiente, en lugar de activar la directiva include debes añadir dos directivas ssl_certificate y ssl_certificate_key que indiquen las rutas a los certificados (clave pública y privada, respectivamente).

En este caso la configuración quedaría muy parecida a esto:

...
        listen 443 ssl default_server;
        listen [::]:443 ssl default_server;
...
        #include snippets/snakeoil.conf;
        ssl_certificate /etc/letsencrypt/live/blog.debian10.local/cert.pem;
        ssl_certificate_key /etc/letsencrypt/live/blog.debian10.local/privkey.pem;
...

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, ¡puedes invitarme a un café!

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

Deja un comentario

Cerrar menú

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