Tutorial

Cómo instalar Nginx en Debian 9

NginxDebian 9

Introducción

Nginx es uno de los servidores web más populares del mundo y aloja algunos de los sitios más grandes y de mayor tráfico de Internet. Es más fácil de utilizar que Apache en la mayoría de los casos y puede emplearse como servidor web o proxy inverso.

En esta guía, explicaremos la manera de instalar Nginx en su servidor de Debian 9.

Requisitos previos

Antes de comenzar a aplicar esta guía, debe disponer de un usuario no root normal con privilegios sudo configurado en su servidor y un firewall activo. Puede aprender a hacerlo siguiendo la guía de configuración inicial de servidores para Debian 9.

Cuando disponga de una cuenta, inicie sesión como usuario no root para comenzar.

Paso 1: Instalar Nginx

Debido a que Nginx está disponible en los repositorios predeterminados de Debian, es posible instalarlo desde estos repositorios usando el sistema de paquetes apt.

Debido a que se trata de nuestra primera interacción con el sistema de paquetes apt en esta sesión, también actualizaremos nuestro índice local de paquetes de modo que tengamos acceso los listados de paquetes más recientes. A continuación, podremos instalar nginx:

  • sudo apt update
  • sudo apt install nginx

Tras aceptar el procedimiento, apt instalará Nginx y cualquier dependencia necesaria en su servidor.

Paso 2: Aplicar ajustes al firewall

Antes de probar Nginx, se deben aplicar ajustes al software del firewall para permitir el acceso al servicio.

Enumere las configuraciones de la aplicación con las que ufw sabe trabajar escribiendo lo siguiente:

  • sudo ufw app list

Debería obtener un listado de los perfiles de aplicación:

Output
Available applications: ... Nginx Full Nginx HTTP Nginx HTTPS ...

Como puede ver, hay tres perfiles disponibles para Nginx:

  • Nginx Full: este perfil abre el puerto 80 (tráfico web normal, no cifrado) y el puerto 443 (tráfico TLS/SSL cifrado)
  • Nginx HTTP: este perfil abre solo el puerto 80 (tráfico web normal, no cifrado)
  • Nginx HTTPS: este perfil abre solo el puerto 443 (tráfico TLS/SSL cifrado)

Se recomienda habilitar el perfil más restrictivo, que de todos modos permitirá el tráfico que configuró. Debido a que en esta guía aún no configuramos SSL para nuestro servidor, solo deberemos permitir el tráfico en el puerto 80.

Puede habilitarlo escribiendo lo siguiente:

  • sudo ufw allow 'Nginx HTTP'

Puede verificar el cambio escribiendo lo siguiente:

  • sudo ufw status

Debería ver el tráfico HTTP permitido en el resultado que se muestra:

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)

Paso 3: Comprobar su servidor web

Al final del proceso de instalación, Debian 9 inicia Nginx. El servidor web ya debería estar activo.

Realice una verificación con systemd init para asegurarse de que el servicio esté en ejecución escribiendo lo siguiente:

  • 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 Tue 2018-09-04 18:15:57 UTC; 3min 28s ago Docs: man:nginx(8) Process: 2402 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 2399 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Main PID: 2404 (nginx) Tasks: 2 (limit: 4915) CGroup: /system.slice/nginx.service ├─2404 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; └─2405 nginx: worker process

Como puede ver arriba, parece que el servicio se inició correctamente. Sin embargo, la mejor forma de comprobarlo es solicitar una página de Nginx.

Puede acceder a la página de aterrizaje predeterminada de Nginx para confirmar que el software funcione correctamente dirigiéndose a la dirección IP de su servidor. Si no conoce la dirección IP de su servidor, intente escribir lo siguiente en la instrucción de comandos de su servidor:

  • ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

Obtendrá algunas líneas. Puede probar cada una de ellas en su navegador web para ver si funcionan.

Cuando tenga la dirección IP de su servidor, introdúzcala en la barra de direcciones de su navegador:

http://your_server_ip

Debería ver la página de aterrizaje predeterminada de Nginx:

Página predeterminada de Nginx

Esta página se incluye con Nginx para mostrarle que el servidor se ejecuta correctamente.

Paso 4: Administrar el proceso de Nginx

Ahora que su servidor web está listo, revisaremos algunos de los comandos básicos de administración.

Para detener su servidor web, escriba lo siguiente:

  • sudo systemctl stop nginx

Para iniciar el servidor web cuando no esté activo, escriba lo siguiente:

  • sudo systemctl start nginx

Para detener y luego iniciar el servicio de nuevo, escriba lo siguiente:

  • sudo systemctl restart nginx

Si simplemente realizará cambios en la configuración, Nginx a menudo puede volver a cargase sin perder conexiones. Para hacer esto, escriba lo siguiente:

  • sudo systemctl reload nginx

De forma predeterminada,Nginx está configurado para iniciarse automáticamente cuando lo haga el servidor. Si no es lo que quiere, deshabilite este comportamiento escribiendo lo siguiente:

  • sudo systemctl disable nginx

Para volver a habilitar el servicio de modo que se cargue en el inicio, puede escribir lo siguiente:

  • sudo systemctl enable nginx

Paso 5: Configurar los bloques del servidor

Al emplear el servidor web Nginx, se pueden utilizar_ bloques de servidor_ (similares a hosts virtuales de Apache) para encapsular los detalles de la configuración y alojar más de un dominio desde un único servidor. Configuraremos un dominio llamado example.com, pero debería cambiarlo por el nombre de su propio dominio. Consulte nuestra introducción a DNS de DigitalOcean para hallar más información sobre la configuración de un nombre de dominio con DigitalOcean.

Nginx en Debian 9 tiene habilitado un bloque de servidor por defecto, que está configurado para presentar documentos desde un directorio en /var/www/html. Si bien esto funciona bien para un solo sitio, puede ser difícil de manejar si aloja varios. En vez de modificar /var/www/html, crearemos una estructura de directorios dentro de /var/www para nuestro sitio example.com y dejaremos /var/www/html como directorio predeterminado que se abastecerá si una solicitud de cliente no coincide con otros sitios.

Cree el directorio para example.com, utilizando el indicador -p para crear cualquier directorio principal necesario:

  • sudo mkdir -p /var/www/example.com/html

A continuación, asigne la propiedad del directorio con la variable de entorno $USER:

  • sudo chown -R $USER:$USER /var/www/example.com/html

Los permisos de sus root web deberían ser correctos si no modificó el valor umask, pero puede comprobarlo escribiendo lo siguiente:

  • sudo chmod -R 755 /var/www/example.com

A continuación, cree una página de ejemplo index.html utilizando nano o su editor favorito:

  • nano /var/www/example.com/html/index.html

Dentro de ella, agregue el siguiente ejemplo de HTML:

/var/www/example.com/html/index.html
<html>
    <head>
        <title>Welcome to Example.com!</title>
    </head>
    <body>
        <h1>Success!  The example.com server block is working!</h1>
    </body>
</html>

Guarde y cierre el archivo cuando termine.

Para que Nginx presente este contenido, es necesario crear un bloque de servidor con las directivas correctas. En vez de modificar el archivo de configuración predeterminado directamente, crearemos uno nuevo en /etc/nginx/sites-available/example.com:

  • sudo nano /etc/nginx/sites-available/example.com

Péguelo en el siguiente bloque de configuración, similar al predeterminado, pero actualizado para nuestro nuevo directorio y nombre de dominio:

/etc/nginx/sites-available/example.com
server {
        listen 80;
        listen [::]:80;

        root /var/www/example.com/html;
        index index.html index.htm index.nginx-debian.html;

        server_name example.com www.example.com;

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

Observe que actualizamos la configuración root en nuestro nuevo directorio y el server_name para nuestro nombre de dominio.

A continuación, habilitaremos el archivo creando un enlace entre él y el directorio sites-enabled, en el cual Nginx obtiene lecturas durante el inicio:

  • sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Ahora, contamos con dos bloques de servidor habilitados y configurados para responder a las solicitudes conforme a las directivas listen y server_name (puede obtener más información sobre cómo Nginx procesa estas directivas aquí):

  • example.com: responderá a solicitudes de example.com y www.example.com.
  • default: responderá a cualquier solicitud en el puerto 80 que no coincida con los otros dos bloques.

Para evitar un problema de memoria de depósito de hash que pueda surgir al agregar nombres de servidor, es necesario aplicar ajustes a un valor en el archivo /etc/nginx/nginx.conf. Abra el archivo:

  • sudo nano /etc/nginx/nginx.conf

Encuentre la directiva server_names_hash_bucket_size y elimine el símbolo # para quitar el comentario de la línea:

/etc/nginx/nginx.conf
...
http {
    ...
    server_names_hash_bucket_size 64;
    ...
}
...

Guarde y cierre el archivo cuando termine.

A continuación, compruebe que no haya errores de sintaxis en ninguno de sus archivos de Nginx:

  • sudo nginx -t

Si no hay problemas, verá el siguiente resultado:

Output
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful

Una vez superada la prueba de configuración, reinicie Nginx para habilitar sus cambios:

  • sudo systemctl restart nginx

Con esto, Nginx debería proporcionar su nombre de dominio. Puede comprobarlo visitando http://example.com, donde debería ver algo como lo siguiente:

Primer bloque de servidor de Nginx

Paso 6: Familiarizarse con archivos y directorios importantes de Ngnix

Ahora que sabe administrar el propio servicio de Nginx, debería tomarse unos minutos para familiarizarse con algunos directorios y archivos importantes.

Contenido

  • /var/www/html: el contenido web real, que por defecto solo consta de la página predeterminada de Nginx que vio antes, se presenta desde el directorio /var/www/html. Esto se puede cambiar modificando los archivos de configuración de Nginx.

Configuración del servidor

  • /etc/nginx: directorio de configuración de Nginx. En él se encuentran todos los archivos de configuración de Nginx.
  • /etc/nginx/nginx.conf: archivo de configuración principal de Nginx. Esto se puede modificar para realizar cambios en la configuración general de Nginx.
  • /etc/nginx/sites-available/: directorio en el que se pueden guardar bloques de servidor por sitio. Nginx no utilizará los archivos de configuración de este directorio a menos que estén vinculados al directorio sites-enabled. Normalmente, toda la configuración del bloque de servidor se realiza en este directorio y luego se habilita estableciendo un vínculo con el otro directorio.
  • /etc/nginx/sites-enabled/: directorio en el que se almacenan los bloques de servidor habilitados por sitio. Normalmente, estos se crean estableciendo vínculos con los archivos de configuración del directorio sites-available.
  • /etc/nginx/snippets: este directorio contiene fragmentos de configuración que pueden incluirse en otras partes de la configuración de Nginx. Los segmentos de configuración potencialmente repetibles reúnen las condiciones para la conversión a fragmentos.

Registros del servidor

  • /var/log/nginx/access.log: cada solicitud a su servidor web se registra en este archivo de registro, a menos que Nginx esté configurado para hacer algo diferente.
  • /var/log/nginx/error.log: cualquier error de Nginx se asentará en este registro.

Conclusión

Ahora que instaló su servidor web, dispone de muchas opciones respecto del tipo de contenido que puede ofrecer y de las tecnologías que puede utilizar para brindar una experiencia más completa a sus usuarios.

Creative Commons License