Nginx es un servidor web de alto rendimiento, como proxy inverso, equilibrador de carga y servidor de caché. Es conocido por su capacidad para manejar múltiples conexiones simultáneas con un consumo mínimo de recursos.
Instalación de Nginx
En sistemas basados en Debian/Ubuntu
sudo apt update
sudo apt install nginx
En sistemas basados en RHEL/CentOS
sudo yum install epel-release
sudo yum install nginx
En Windows
Descargar Nginx desde nginx.org, y sigue las instrucciones.
Verificar la instalación
Para comprobar que Nginx se está ejecutando:
sudo systemctl status nginx
Configuración básica
Archivo de configuración
El archivo principal de configuración se encuentra en:
`/etc/nginx/nginx.conf`
Estructura básica del archivo de configuración
user www-data; # Usuario que ejecuta el proceso
worker_processes auto; # Procesos de trabajo
events {
worker_connections 1024; # Máx. conexiones por proceso
}
http {
include /etc/nginx/mime.types; # Tipos MIME
default_type application/octet-stream; # Tipo por defecto
server {
listen 80; # Puerto
server_name example.com; # Nombre de dominio
location / {
root /var/www/html; # Directorio raíz
index index.html index.htm; # Archivo índice
}
}
}
Verificar la configuración
sudo nginx -t # Probar la configuración
Recargar la configuración
sudo systemctl reload nginx # Recargar sin detener el servicio
Detener y reiniciar Nginx
sudo systemctl stop nginx # Detener Nginx
sudo systemctl start nginx # Iniciar Nginx
sudo systemctl restart nginx # Reiniciar Nginx
Gestión de servidores virtuales
Configurar un servidor virtual
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example; # Carpeta de documentos
index index.html index.htm;
location / {
try_files $uri $uri/ =404; # Manejo de errores 404
}
}
Redirigir HTTP a HTTPS
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri; # Redirigir a HTTPS
}
Configurar HTTPS
server {
listen 443 ssl; # Habilitar SSL
server_name example.com;
ssl_certificate /etc/ssl/certs/example.crt; # Certificado SSL
ssl_certificate_key /etc/ssl/private/example.key; # Clave privada
location / {
root /var/www/example;
index index.html index.htm;
}
}
Configuración de ubicación
Ubicación por defecto
location / {
try_files $uri $uri/ =404;
}
Redirección de ubicación específica
location /old {
return 301 /new; # Redirigir de /old a /new
}
Configuración de ubicación para archivos estáticos
location /images/ {
alias /var/www/images/; # Alias para directorio de imágenes
}
Optimización de rendimiento
Habilitar compresión
http {
gzip on; # Habilitar gzip
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript; # Tipos a comprimir
}
Habilitar caché
location / {
expires 30d; # Caché por 30 días
}
Balanceo de carga
Configuración básica
http {
upstream myapp {
server app1.example.com;
server app2.example.com;
}
server {
listen 80;
location / {
proxy_pass http://myapp; # Pasar a grupo upstream
}
}
}
Métodos de balanceo
- Round Robin (por defecto)
- Least Connections
upstream myapp {
least_conn; # Conexiones más bajas
server app1.example.com;
server app2.example.com;
}
Seguridad
Proteger contra ataques DDoS
http {
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s; # Limitar a 1 request por segundo
server {
location / {
limit_req zone=mylimit burst=5; # Permitir ráfagas
}
}
}
Configuración de encabezados de seguridad
server {
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header X-Frame-Options DENY;
add_header Content-Security-Policy "default-src 'self'";
}
Esto solo son ejemplos de comandos. Una configuración segura es mucho más compleja
Monitoreo y registro
Activar registro de acceso
http {
access_log /var/log/nginx/access.log; # Ruta de acceso
error_log /var/log/nginx/error.log; # Ruta de error
}
Formato de registro personalizado
log_format custom '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
Solución de problemas
Comprobar los registros
Para obtener información sobre errores:
cat /var/log/nginx/error.log
Configurar niveles de registro
error_log /var/log/nginx/error.log warn; # Nivel de advertencia