Instalación de Nginx en Distribuciones Linux Basadas en APT
Nginx es un servidor web de alto rendimiento y un proxy inverso que se ha convertido en una opción popular para el despliegue de aplicaciones modernas. Esta guía detalla el proceso de instalación y configuración básica de Nginx en sistemas operativos Linux que utilizan el gestor de paquetes APT, como Debian, Ubuntu o Kylin OS.
Paso 1: Actualizar el Índice de Paquetes
Antes de instalar cualquier software nuevo, es una buena práctica actualizar la lista de paquetes disponibles en su sistema para asegurar que está obteniendo las versiones más recientes y corregir posibles dependencias.
sudo apt update
Paso 2: Instalar Nginx
Una vez que el sistema esté actualizado, proceda con la instalación de Nginx. El comando descargará e instalará Nginx y todas sus dependencias.
sudo apt install nginx
Paso 3: Verificar la Instalación
Después de la instalación, puede verificar que Nginx se ha instalado correctamente y conocer su versión ejecutando el siguiente comando:
nginx -v
Para confirmar que el servicio Nginx se está ejecutando, utilice systemctl:
systemctl status nginx
Debería ver un estado que indique "active (running)".
Paso 4: Gestión del Servicio Nginx
Nginx se ejecuta como un servicio en el sistema. Puede controlarlo utilizando los siguientes comandos de systemctl:
- Iniciar Nginx:
sudo systemctl start nginx
- Habilitar Nginx al inicio del sistema: (Recomendado para que Nginx arranque automáticamente después de un reinicio)
sudo systemctl enable nginx
- Reiniciar Nginx: (Detiene y vuelve a iniciar el servicio, útil para aplicar cambios importantes o resolver problemas)
sudo systemctl restart nginx
- Recargar Configuración de Nginx: (Aplica cambios a los archivos de configuración sin detener el servicio, ideal para cambios menores sin interrupción)
sudo systemctl reload nginx
Alternativamente, también puede usar el comando específico de Nginx para recargar:
sudo nginx -s reload
- Detener Nginx:
sudo systemctl stop nginx
Paso 5: Acceso Inicial al Servidor Web
Una vez que Nginx está en funcionamiento, puede verificar su configuración predeterminada abriendo un navegador web y navegendo a la dirección IP de su servidor o a http://localhost/ si está accediendo desde la misma máquina. Debería ver la página de bienvenida predeterminada de Nginx.
Paso 6: Ubicaciones Clave de Archivos de Nginx
Es fundamental conocer las rutas de los archivos y directorios más importantes de Nginx:
/etc/nginx/: Directorio principal de configuración./etc/nginx/nginx.conf: Archivo de configuración global de Nginx./etc/nginx/conf.d/: Directorio para archivos de configuración de sitios individuales (incluidos pornginx.conf)./var/www/html/: Directoiro predeterminado para el contenido web estático./usr/sbin/nginx: Binario principal de Nginx./var/log/nginx/: Directorio donde se almacenan los archivos de registro (access.log y error.log).
Paso 7: Modificación de la Configuración de Nginx
La configuración de Nginx se realiza principalmente editando los archivos en el directorio /etc/nginx/. El archivo /etc/nginx/nginx.conf es el archivo de configuración principal. Puede editarlo con un editor de texto como Vim:
sudo vim /etc/nginx/nginx.conf
Ejemplo de Configuración Avanzada
A continuación, se presenta un ejemplo de configuración que incluye la servidumbre de archivos estáticos para una aplicación frontend, la compresión Gzip, la configuración de un proxy inverso para una API backend y la habilitación de CORS. Este ejemplo asume que tiene una aplicación frontend en /opt/mi_app_frontend y un backend de API escuchando en un puerto local.
worker_processes auto; # Configura el número de procesos worker automáticamente
events {
worker_connections 1024; # Número máximo de conexiones simultáneas por worker
}
http {
include mime.types; # Incluye las definiciones de tipos MIME
default_type application/octet-stream; # Tipo MIME predeterminado
# Configuración de compresión Gzip para mejorar el rendimiento
gzip on;
gzip_min_length 1000; # Compresión mínima para archivos de 1KB
gzip_buffers 4 16k; # Número y tamaño de los búferes de compresión
gzip_comp_level 5; # Nivel de compresión (1-9, 5 es un buen equilibrio)
gzip_types text/plain application/javascript application/x-javascript text/css application/xml application/json;
sendfile on; # Habilita el envío directo de archivos
keepalive_timeout 65; # Tiempo de espera para conexiones persistentes
client_max_body_size 20m; # Tamaño máximo permitido para el cuerpo de la solicitud
# Bloque de servidor para la aplicación frontend
server {
listen 80; # Escucha en el puerto HTTP estándar
server_name ejemplo.com www.ejemplo.com; # Nombre de dominio de su servidor
location / {
root /opt/mi_app_frontend; # Directorio raíz de los archivos de la aplicación
index index.html index.htm; # Archivos de índice predeterminados
try_files $uri $uri/ /index.html; # Para aplicaciones SPA (Single Page Applications)
}
# Proxy inverso para la API backend
location /api/ {
proxy_pass http://localhost:8080/; # La dirección de su API backend
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# Manejo de errores personalizados
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# Bloque de servidor para una API backend directamente (con CORS)
server {
listen 8458; # Puerto alternativo para la API
server_name api.ejemplo.com; # Dominio o IP para la API
# Cabeceras CORS para permitir solicitudes desde otros orígenes
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Credentials' 'true' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization' always;
# Manejo de solicitudes OPTIONS para pre-vuelo de CORS
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
location / {
proxy_pass http://127.0.0.1:9291; # La dirección real del servicio API
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade"; # Para WebSockets
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
Configuración Modular con Directorios Incluidos
Para una mejor organización, especialmente cuando se gestionan múltiples sitios web o aplicaciones, Nginx permite incluir archivos de configuración adicionales. Es una práctica común crear un archivo .conf separado para cada sitio dentro del directorio /etc/nginx/conf.d/. El archivo nginx.conf principal ya incluye por defecto la línea include /etc/nginx/conf.d/*.conf; dentro del bloque http {}, lo que hace que Nginx cargue todas las configuraciones en ese directorio.
Para crear un nuevo archivo de configuración para un sitio:
sudo touch /etc/nginx/conf.d/mi_sitio_web.conf
sudo vim /etc/nginx/conf.d/mi_sitio_web.conf
A continuación, un ejemplo de contenido para /etc/nginx/conf.d/mi_sitio_web.conf:
server {
listen 9898; # Puerto específico para este sitio
server_name mi-aplicacion.local; # Dominio o nombre de host
location / {
root /var/www/mi-aplicacion; # Directorio donde reside su aplicación
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location /backend-api/ {
proxy_pass http://localhost:3000/; # Proxy a un backend en el puerto 3000
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
Después de realizar cualquier cambio en los archivos de configuración, recuerde seimpre recargar Nginx para que los cambios surtan efecto:
sudo systemctl reload nginx