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.