GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Cómo instalar Nginx con Let's Encrypt TLS/SSL en Ubuntu 20.04

NGINX es un software de servidor HTTP gratuito y de código abierto. Además de sus capacidades de servidor HTTP, NGINX también puede funcionar como servidor proxy para correo electrónico (IMAP, POP3 y SMTP) y como proxy inverso y equilibrador de carga para servidores HTTP, TCP y UDP. El objetivo detrás de NGINX era crear el servidor web más rápido y mantener esa excelencia sigue siendo un objetivo central del proyecto Nginx. NGINX constantemente supera a Apache y otros servidores en los puntos de referencia que miden el rendimiento del servidor web y ahora es el servidor web más popular según W3Tech.

En el siguiente tutorial, aprenderá a instalar Nginx en Ubuntu 20.04 LTS utilizando el repositorio predeterminado de Ubuntu o el PPA alternativo de Ondřej Surý con un certificado TLS/SSL gratuito de Let’s Encrypt.

Requisitos

  • SO recomendado: Ubuntu 20.04 o superior
  • Cuenta de usuario: Una cuenta de usuario con sudo o acceso root.

Actualización del sistema operativo

Actualiza tu Ubuntu sistema operativo para asegurarse de que todos los paquetes existentes estén actualizados :

sudo apt update && sudo apt upgrade

Acceso raíz o Sudo

Por defecto, la cuenta creada con Ubuntu estaba dando estado de sudo. Aún así, suponga que necesita proporcionar acceso sudo/root a cuentas adicionales. En ese caso, debe tener acceso a la contraseña raíz para usar el comando su o visite nuestro tutorial sobre cómo agregar un usuario a Sudoers en Ubuntu.

Instalar Nginx

Método 1. Instalar Nginx Stable desde el repositorio de Ubuntu

El primer método es instalar Nginx desde los repositorios predeterminados de Ubuntu, y se ha demostrado que estas versiones son estables y seguras. Si necesita ejecutar un servidor web principal o un proxy inverso, a menudo se recomienda instalar los paquetes del repositorio de Ubuntu.

Para instalar Nginx, ejecute el siguiente comando.

sudo apt install nginx

Ejemplo de salida:

Escribe “Y,” luego presione la “TECLA ENTER” para continuar con la instalación.

A continuación, verifique la compilación de la versión y si la instalación fue exitosa.

sudo nginx -v

Ejemplo de salida:

nginx version: nginx/1.18.0

Método 2. Instale la última línea estable o principal de Nginx desde Ondřej Surý PPA

Alternativamente, en lugar de instalar la compilación estable predeterminada de Nginx desde el repositorio de Ubuntu 20.04, puede instalar Nginx Stable o Mainline utilizando el PPA de Ondřej Surý, el mantenedor de PHP para Debian.

Instale uno de los siguientes PPA con el siguiente comando:

Instalar Nginx más reciente (ESTABLE):

sudo add-apt-repository ppa:ondrej/nginx-stable -y && sudo apt update

Instalar Nginx más reciente (LÍNEA PRINCIPAL):

sudo add-apt-repository ppa:ondrej/nginx-mainline -y && sudo apt update

Ahora que ha instalado el PPA y actualizó la lista de repositorios, instale Nginx con lo siguiente:

sudo apt install nginx-core nginx-common nginx nginx-full

Ejemplo de salida:

Escribe “Y,” luego presione la “TECLA ENTER” para continuar con la instalación.

A continuación, verifique la compilación de la versión y si la instalación fue exitosa.

sudo nginx -v

Ejemplo de salida (desde la línea principal):

nginx version: nginx/1.18.0

Ahora verifique que se instaló el último Nginx del repositorio de Ondřej Surý usando el comando de política apt-cache . Tenga en cuenta el ejemplo del tutorial línea principal Nginx instalada:

apt-cache policy nginx

Ejemplo de salida para Nginx Mainline :

Tenga en cuenta que es posible que se le pida que mantenga o reemplace su /etc/nginx/ existente nginx.conf archivo de configuración durante la instalación si tenía Nginx instalado anteriormente. Se recomienda mantener su archivo de configuración actual presionando (n) . Se realizará una copia independientemente de la versión del mantenedor, y también puede verificar esto en el futuro.

Notará que habrá módulos adicionales disponibles en esta versión, sobre todo la compatibilidad con brotli. Para instalar brotli , siga los pasos a continuación.

Abra su nginx.conf archivo de configuración:

nano /etc/nginx/nginx.conf

Ahora agregue las líneas adicionales antes en el HTTP{} sección:

brotli on;
brotli_comp_level 6;
brotli_static on;
brotli_types application/atom+xml application/javascript application/json application/rss+xml
   application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype
   application/x-font-ttf application/x-javascript application/xhtml+xml application/xml
   font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon
   image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml;

El brotli_comp_level se puede establecer entre 1 (más bajo) y 11 (más alto) . Por lo general, la mayoría de los servidores se ubican en el medio, pero si su servidor es un monstruo, configúrelo en 11 y controle los niveles de uso de la CPU.

A continuación, pruebe para asegurarse de que los cambios funcionan correctamente antes de publicarlo:

sudo nginx -t

Si los cambios funcionan correctamente, debería ver lo siguiente:

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

Ahora haga los cambios en vivo reiniciando su servidor:

sudo systemctl restart nginx
sudo systemctl status nginx

Ejemplo de salida:

Configuración de UFW

De forma predeterminada, UFW está instalado en Ubuntu 20.04. Si usa UFW o quiere una visión más clara de cómo ejecutar un firewall, use la siguiente información para configurar UFW para Nginx.

Si UFW no está instalado, reinstale el firewall usando el siguiente comando:

sudo apt install ufw -y

A continuación, habilite UFW con el siguiente comando.

sudo ufw enable

De forma predeterminada, todas las conexiones entrantes ahora están bloqueadas y todas las salientes están permitidas.

A continuación, averigüe qué aplicaciones tiene instaladas ingresando lo siguiente.

sudo ufw app list

Ejemplo de salida (tenga en cuenta que también aparecerá una lista extensa de otras aplicaciones):

 Available applications:
   Nginx Full
   Nginx HTTP
   Nginx HTTPS

A continuación, puede habilitar Nginx en HTTP (Puerto 80), HTTPS (Puerto 443) o Completo, incluidas todas las opciones.

HTTP (Puerto 80):

sudo ufw allow 'Nginx HTTP'

HTTP (Puerto 443):

sudo ufw allow 'Nginx HTTPS'

HTTP y HTTPS (completo):

sudo ufw allow 'Nginx FULL'

En el tutorial, “Nginx (Completo)” fue habilitado.

Ejemplo de salida:

 Rules updated
 Rules updated (v6)

Confirme que las reglas del cortafuegos estén activas con el siguiente comando.

sudo ufw status

Verá las reglas enumeradas en la salida.

 Status: active
 To                         Action      From
 --                         ------      ----
 Nginx Full                 ALLOW       Anywhere                  
 Nginx Full (v6)          ALLOW       Anywhere (v6) 

Después de configurar UFW, asegúrese de que puede ver la página de destino de Nginx en su navegador de Internet.

http://your_server_ip

Si todo funciona bien, debería aterrizar en la siguiente página:

Configurar servidor Nginx

Deberá tener la dirección IP del servidor lista para configurar. La forma más fácil de hacerlo es con lo siguiente.

Buscar dirección IP del servidor

Deberá tener la dirección IP del servidor lista para configurar. La forma más fácil de hacerlo es con lo siguiente.

curl -4 icanhazip.com

Ejemplo de salida:

XXX.XXX.XXX.XXX IP address

Si surge un error, lo más probable es que necesite instalar el paquete curl en su sistema. Ejecute rápidamente este comando:

sudo apt install curl -y

Configurar el directorio de origen del sitio

Nginx bloqueos de servidor (similar a los hosts virtuales en Apache) puede encapsular detalles de configuración y alojar más de un dominio desde un solo servidor. En el tutorial, configurará un dominio llamado example.com , pero debe reemplazar esto con su nombre de dominio .

Cuando instala Nginx, se crea con un directorio www preinstalado. La ubicación se encuentra en /var/www/html/ .

Primero, cree el directorio, para example.com , de la siguiente manera, usando el indicador "-p" para crear los directorios principales necesarios:

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

En segundo lugar, deberá asignar el propietario del directorio.

sudo chown -R $USER:$USER /var/www/your_domain/html

En tercer lugar, asigne los permisos del directorio, de modo que el propietario lea, escriba y ejecute los archivos mientras otorga solo permisos de lectura y ejecución a grupos y otros. Puede ingresar el siguiente comando:

sudo chmod -R 755 /var/www/your_domain

Configurar página HTML de prueba

Cuarto, cree una página de prueba que usará para confirmar que su servidor Nginx está operativo.

nano /var/www/your_domain/html/index.html

Dentro del editor nano y el nuevo archivo que ha creado. Ingrese lo siguiente.

<html>
 <head>
  <title>Welcome to your_domain!</title>
 </head>
 <body>
   <h1>Success!  The your_domain server block is working!</h1>
 </body>
</html>

Guarda el archivo CTRL+O, luego salga CTRL+X .

Crear bloque de servidor Nginx

Ahora, creará el bloque de servidor para su sitio web. Crearemos un nuevo bloque de servidor de la siguiente manera.

sudo nano /etc/nginx/sites-available/your_domain.conf

Puede pegar el siguiente código de ejemplo en el bloque. Este es solo un ejemplo de solo HTTP para pruebas básicas.

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

 root /var/www/your_domain/html;

  index index.html index.htm index.nginx-debian.html;
  server_name your_domain www.your_domain;

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

El ejemplo muestra que su servidor está escuchando dos nombres de servidor, “su_dominio” en el puerto 80.

Deberá cambiar el directorio raíz al nombre/ubicación del directorio raíz que creó.

Habilitar bloque de servidor Nginx

Para habilitar los bloques del servidor Nginx, debe vincular los archivos de configuración de los sitios disponibles a los sitios habilitados en su directorio Nginx. Esto se puede hacer con el comando ln -s de la siguiente manera.

sudo ln -s /etc/nginx/sites-available/your_domain.conf /etc/nginx/sites-enabled/

Configuración final y ejecución de prueba

En la etapa final, deberá abrir su nginx.conf predeterminado. archivo.

sudo nano /etc/nginx/nginx.conf

Y descomente la siguiente línea.

server_names_hash_bucket_size 64;

El tamaño del depósito hash del nombre del servidor se cambia, ya que a veces surgen problemas al agregar servidores adicionales.

A continuación, pruebe su Nginx para asegurarse de que funciona antes de reiniciar correctamente.

sudo nginx -t

El resultado debería ser si no hay errores en la sintaxis:

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

Si tiene el siguiente resultado correcto, reinicie el servidor Nginx para que se realicen los cambios.

sudo systemctl restart nginx

Ahora abra su navegador de Internet y escriba el nombre de dominio del servidor . Deberías ver que tu bloque de servidor está activo.

Proteja Nginx con el certificado gratuito Let's Encrypt SSL

Idealmente, le gustaría ejecutar su Nginx en HTTPS usando un certificado SSL . La mejor manera de hacerlo es usar Let's Encrypt, una autoridad de certificación gratuita, automatizada y abierta dirigida por el Grupo de Investigación de Seguridad de Internet (ISRG) sin fines de lucro .

Primero, instale el paquete certbot de la siguiente manera:

sudo apt install python3-certbot-nginx -y

Una vez instalado, ejecute el siguiente comando para iniciar la creación de su certificado:

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d www.example.com

Esta es la configuración ideal que incluye forzar redireccionamientos HTTPS 301, encabezado Strict-Transport-Security y grapado OCSP. Solo asegúrese de ajustar el correo electrónico y el nombre de dominio a sus requisitos.

Ahora su URL será HTTPS://www.example.com en lugar de HTTP://www.example.com .

Tenga en cuenta que si utiliza la antigua URL HTTP , se redirigirá automáticamente a HTTPS .

Cómo acceder a los registros del servidor Nginx

Directorio de registros de Nginx

De forma predeterminada, todos los registros de acceso/error de NGINX, a menos que los haya cambiado, se encuentran en el directorio de registro, que puede ver el siguiente comando.

Primero, navegue hasta el directorio de registros y enumere los archivos:

cd /var/log/nginx && ls -l

Debería encontrar los siguientes archivos de acceso y error:

Registro de acceso:

/var/log/nginx/access.log

Registro de errores:

/var/log/nginx/error.log

Para ver registros en tiempo real en su terminal usando el comando sudo tail -f /ubicación/de/ruta de registro.

Ejemplo:

sudo tail -f /var/log/nginx/access.log

Otra opción es imprimir la última X cantidad de líneas. Por ejemplo, X se reemplaza por 30 para imprimir 30 líneas agregando las banderas -n 30 .

sudo tail -f /var/log/nginx/access.log -n 30

Estos son solo algunos ejemplos de registros de lectura.

Cómo configurar la rotación de registros de Nginx

Nginx instala automáticamente la rotación de registros y la configura de forma predeterminada, que es rotar diariamente. Puede cambiar esta configuración accediendo al archivo como se muestra a continuación.

sudo nano /etc/nginx/logrotate.d/nginx

A continuación, verá la misma estructura de archivos, si no similar. Puede modificar los contenidos aquí. En su mayoría, puede cambiar la cantidad de registros que desea mantener o pasar de diario a semanal. Esto debe dejarse en el valor predeterminado a menos que tenga necesidades específicas de requisitos de registro para software como el monitoreo fail2ban o similar.

/var/log/nginx/*.log {
  daily
  missingok
  rotate 14
  compress
  delaycompress
  notifempty
  create 0640 www-data adm
  sharedscripts
  prerotate
  if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
  run-parts /etc/logrotate.d/httpd-prerotate; \
  fi \
  endscript
  postrotate
  invoke-rc.d nginx rotate >/dev/null 2>&1
  endscript
}

La configuración principal que probablemente querrá cambiar es la siguiente:

  • Diario – Esto se puede cambiar a Semanal, Mensual. Esto debe mantenerse a diario, o de lo contrario será difícil revisar el archivo de registro.
  • Rotar 14 – Esta es la cantidad de registros que debe mantener y eliminar, por lo que, como máximo, solo hay 14 registros, si solo desea conservar 7 días de registros, cambie esto a 7.

Se recomienda no tocar ninguna otra configuración a menos que sepa lo que está haciendo.

Cómo actualizar Nginx

Nginx se actualizará de forma predeterminada cuando una nueva versión llegue a los repositorios. Antes de actualizar, siempre se recomienda hacer una copia de seguridad de su directorio Nginx o, al menos, del nginx.conf expediente. Puede hacerlo con el siguiente comando.

Copia de seguridad de nginx.conf (muy recomendable):

sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx-backup.conf

Haz una copia de seguridad de toda tu carpeta Nginx si lo prefieres:

sudo cp /etc/nginx/ /etc/nginx-bkup

A continuación, ejecute el comando de actualización estándar.

sudo apt upgrade 

Si hay una actualización disponible, ejecútela.

sudo apt upgrade 

Es posible que se le solicite esto durante una actualización o instalación, pero hacerlo manualmente de antemano es bastante esencial. Para configuraciones grandes de Nginx de varios sitios, sería aún más beneficioso realizar una copia de seguridad en algo como Github o Gitlab.


Ubuntu
  1. Cómo instalar Nextcloud con Nginx y Lets Encrypt SSL en Ubuntu 20.04 LTS

  2. Cómo instalar Magento 2 con Nginx y Lets Encrypt SSL en Ubuntu 20.04 LTS

  3. Cómo instalar MediaWiki con Nginx en Ubuntu 16.04

  4. Cómo instalar Magento con Nginx en Ubuntu 15.10

  5. Cómo instalar Let's Encrypt SSL en Ubuntu 18.04 con Nginx

Cómo instalar Nginx con Let's Encrypt SSL en Fedora 35

Cómo instalar Let's Encrypt SSL en Ubuntu con Apache

Cómo instalar Let's Encrypt SSL con Nginx en Ubuntu 16.04 LTS

Cómo instalar Let's Encrypt SSL para Nginx en Ubuntu 18.04 LTS

Cómo instalar Nginx con Let's Encrypt SSL en Ubuntu 20.04 LTS

Cómo instalar Apache con Let's Encrypt SSL en Ubuntu 20.04 LTS