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 nginxEn sistemas basados en RHEL/CentOS
sudo yum install epel-release
sudo yum install nginxEn Windows
Descargar Nginx desde nginx.org, y sigue las instrucciones.
Verificar la instalación
Para comprobar que Nginx se está ejecutando:
sudo systemctl status nginxConfiguració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ónRecargar la configuración
sudo systemctl reload nginx  # Recargar sin detener el servicioDetener y reiniciar Nginx
sudo systemctl stop nginx  # Detener Nginx
sudo systemctl start nginx  # Iniciar Nginx
sudo systemctl restart nginx  # Reiniciar NginxGestió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.logConfigurar niveles de registro
error_log /var/log/nginx/error.log warn;  # Nivel de advertencia