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 tutorial, aprenderá cómo instalar y configurar Nginx en Fedora 35 con un certificado TLS/SSL gratuito de Let's Encrypt.
Requisitos
- SO recomendado: Fedora Linux 35
- Cuenta de usuario: Una cuenta de usuario con sudo o acceso root.
Actualizar Sistema Operativo
Actualice su Fedora sistema operativo para asegurarse de que todos los paquetes existentes estén actualizados:
sudo dnf upgrade --refresh -y
El tutorial usará el comando sudo y asumiendo que tiene estado sudo .
Para verificar el estado de sudo en su cuenta:
sudo whoami
Ejemplo de salida que muestra el estado de sudo:
[joshua@fedora ~]$ sudo whoami
root
Para configurar una cuenta Sudo existente o nueva, visite nuestro tutorial sobre Agregar un usuario a Sudoers en Fedora .
Para usar la cuenta raíz , use el siguiente comando con la contraseña de root para iniciar sesión.
su
Instalar Nginx estable o principal
Instalar Nginx es muy fácil en las distribuciones de Fedora debido a los lanzamientos semestrales, y su constante actualización de paquetes durante su tiempo significa que Nginx está, en su mayor parte, siempre actualizado.
Dado que Fedora está acostumbrado a tener los paquetes más actualizados, primero habilite el repositorio principal, que Nginx recomienda usar.
sudo dnf module enable nginx:mainline
Ejemplo de salida:
Tipo Y , luego presione la TECLA ENTER para continuar con la instalación.
A continuación, abra su terminal y ejecute el siguiente comando para comenzar el proceso de instalación.
sudo dnf install nginx
Ejemplo de salida:
Tipo Y , luego presione la TECLA ENTER para continuar con la instalación.
Una vez instalado, confirme la instalación comprobando la versión de compilación de Nginx.
nginx -v
Ejemplo de salida (usando el ejemplo principal):
nginx version: nginx/1.21.3
De forma predeterminada, el servicio Nginx no está habilitado ni activo una vez instalado. Para habilitar Nginx, use el siguiente comando.
sudo systemctl enable nginx --now
Ahora verifique el estado del servicio para confirmar que Nginx se está ejecutando sin errores.
systemctl status nginx
Ejemplo de salida:
Como arriba, el estado debe ser activo (en ejecución) . En este punto, ha instalado la aplicación Nginx.
Configurar reglas de cortafuegos
De forma predeterminada, la instalación no agrega automáticamente reglas de firewall al puerto estándar 80 o puerto 443 al instalar Nginx. Antes de continuar, debe establecer las siguientes reglas, esto dependerá de los puertos que usará, pero se enumeran todas las opciones.
Puerto abierto 80 o HTTP:
sudo firewall-cmd --permanent --zone=public --add-service=http
Puerto abierto 443 o HTTPS:
sudo firewall-cmd --permanent --zone=public --add-service=https
Vuelva a cargar el cortafuegos para que los cambios surtan efecto
sudo firewall-cmd --reload
Configurar 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 preparada para la configuración. 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 los comandos no funcionan, lo más probable es que no tenga instalado el paquete curl. Ejecute el siguiente comando:
sudo dnf install curl -y
Una vez que tenga la dirección IP de su servidor, abra su navegador de Internet favorito y verifique que la página de destino predeterminada funcione.
http://your_server_ip
Debería obtener la siguiente página en su navegador de Internet.
Ejemplo:
Configurar el directorio de origen del sitio
En el tutorial, configurará un dominio llamado example.com , pero debe reemplazar esto con su nombre de dominio . El tutorial creará los directorios web y configurará los archivos del sitio en el directorio principal /var/www/ .
Primero, cree el directorio, para example.com , de la siguiente manera, usando “-p” marca para crear los directorios principales necesarios:
sudo mkdir -p /var/www/your_domain/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
Alternativamente, puede usar el /usr/share/nginx/html directorio en su lugar, pero el /var/www Se recomienda el método de directorio para nuevos usuarios.
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
De forma predeterminada, el bloque del servidor Nginx, similar a los hosts virtuales de Apache, se trata en /etc/nginx/conf.d directorio. Sin embargo, la instalación de Nginx varía según las diferentes versiones y distribuciones utilizando el conf.d o sitios-disponibles/sitios-habilitados por defecto. Para el tutorial, los directorios del sitio se utilizarán para mantener un estándar.
Primero, haga que los directorios necesarios para sites-disponible y habilitado para sitios.
sudo mkdir /etc/nginx/sites-available
sudo mkdir /etc/nginx/sites-enabled
A continuación, abra su archivo nginx.conf y elimine o comente el “include /etc/nginx/default.d/*.conf;” .
sudo nano /etc/nginx/nginx.conf
Luego, directamente debajo, agregue include “/etc/nginx/sites-enabled/*.conf;” .
Solo ejemplo:
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;
include /etc/nginx/mime.types;
default_type application/octet-stream;
###EDIT HERE###
# include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*.conf;
}
Como arriba, un “#” se agregó un comentario a include conf.d línea e incluir sitios habilitados fue añadido.
Guarda el archivo (CTRL+O) y salir (CTRL+X) .
A continuación, cree su archivo de configuración de bloque de servidor. El nombre your_domain.conf se usará para el tutorial, pero puede llamarse como prefiera.
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;
server_name your_domain www.your_domain;
root /var/www/your_domain/html;
index index.html index.htm;
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ó.
Bloqueo de servidor Nginx habilitado
Debe vincular los archivos de configuración de los sitios disponibles a los sitios habilitados en su directorio Nginx para habilitar los bloques del servidor 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 .
Instale el paquete certbot de la siguiente manera:
sudo dnf 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 configuración ideal incluye forzar redireccionamientos HTTPS 301, un encabezado de seguridad de transporte estricto 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 .
Si usa la antigua URL HTTP , se redirigirá automáticamente a HTTPS .
Opcionalmente, puede configurar un trabajo cron para renovar los certificados automáticamente. Certbot ofrece una secuencia de comandos que hace esto automáticamente, y primero puede probar para asegurarse de que todo funciona realizando una ejecución en seco.
sudo certbot renew --dry-run
Si todo funciona, abra su ventana crontab usando el siguiente comando de terminal.
sudo crontab -e
Por defecto, la mayoría de los sistemas Fedora no vienen con Cron instalado. Para instalarlo, use el siguiente comando.
sudo dnf install cronie -y
Abra crontab con el siguiente comando.
sudo crontab -e
A continuación, especifique la hora en que debe renovarse automáticamente. Esto debe verificarse diariamente como mínimo, y si es necesario renovar el certificado, el script no actualizará el certificado. Si necesita ayuda para encontrar un buen momento para configurar, use la herramienta gratuita crontab.guru.
00 00 */1 * * /usr/sbin/certbot-auto renew
Ahora guarde el archivo presionando (SHIFT) y
Debería ver el siguiente resultado en la terminal para ver si la adición de la nueva tarea fue exitosa.
crontab: installing new crontab
Gestión del servicio Nginx
Ahora que tiene Nginx ejecutándose correctamente en su servidor, algunas notas clave de administración son las siguientes.
Para detener el servidor web Nginx:
sudo systemctl stop nginx
Para iniciar el servidor web Nginx:
sudo systemctl start nginx
Para reiniciar el servidor web Nginx:
sudo systemctl restart nginx
Para recargar el servidor web Nginx (Para cambios menores que no requieren reiniciar) :
sudo systemctl reload nginx
Para deshabilitar Nginx en el arranque del servidor:
sudo systemctl disable nginx
Para iniciar Nginx en el arranque del servidor (Habilitado automáticamente en la instalación) :
sudo systemctl enable nginx
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 el indicador -n 30 .
sudo tail -f /var/log/nginx/access.log -n 30
Estos son solo algunos ejemplos de registros de lectura, y grep también puede ser útil.
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/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 dnf upgrade --refresh
Si hay una actualización disponible, ejecútela.
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.
Cómo quitar (desinstalar) Nginx
Para eliminar Nginx si ya no lo usa, puede hacerlo con el siguiente comando:
sudo dnf autoremove nginx
Este comando también eliminará las dependencias no utilizadas que venían con la instalación.
Para restablecer el módulo nginx de la línea principal a sus valores predeterminados, use el siguiente comando.
sudo dnf modules reset nginx