🐋
Apuntes Sistemas
  • ⚓Presentación
  • 📊Sistemas y Servidores
    • Personalizar el prompt de Windows
    • Utilidad de manejo de apps para Windows
    • PRACTICA: Arranque dual Windows y Ubuntu
    • 🚧SysLinuxOS: el SO para ASIX
    • Comandos Linux
      • PRACTICA - Ejercicio de práctica comandos
      • 🚧Instalación de paquetes
      • Apuntes Linux: blue/red team
      • Ejemplos de bash
      • Listado de comandos de Linux
    • Comandos Windows
      • 🚧Apuntes Powershell
      • Bucles FOR con batch
      • Scripts de práctica de Windows
    • Prácticas con Windows 10
    • Configuración de netplan
    • Terminal shell
      • SSH
      • 🚧Ghostty
      • 🚧Warp: la terminal inteligente
      • tmux: paneles de terminal
      • Tabby: Mejorar terminal
      • Conexión SSH en red NAT con VirtualBox
      • TheFuck!: Corrección de comandos
      • Wave: Mejorar terminal Linux
      • 🚧Registros de sesiones
    • Instalación manual de Wordpress en CDMON
    • 🏗️Proxmox
    • 🚧TrueNAS
    • Docker
      • Instalación de Docker
      • Dockerfiles
      • Volúmenes de docker
      • Deployment web con Docker con ejemplos
        • 🚧PRACTICA: Node.js con docker
      • Docker Compose
        • Ejemplo 1: Implantación de Wordpress
        • Ejemplo 2: Implementación de servidor con Nginx, Flask y mySQL
        • Ejemplo 3: Implantación de onlyoffice
        • 🚧Ejemplo 4: Passbolt
        • 🚧PRACTICA: Creando una web de emulación de juegos con docker-compose
      • Monitorización con Grafana en Docker
      • Pi-hole con docker
      • Actividad clase: Deployment app
      • Proyectos self-hosted de docker
    • 🚧Ansible
      • Configuración de laboratorio de ansible
    • 🚧Monitorización de servicios y redes
      • Servicios y cronjobs
      • 1Panel
      • 🚧WatchYourLAN
      • 🚧Uptime-kuma
      • 🚧Netdata
      • 🚧Prometheus + Grafana + Loki
    • LDAP
      • 🚧Gestión gráfica de LDAP
      • Carpetas compartidas NFS
      • PRACTICA: Infraestructura LDAP
  • 🗃️Servicios
    • 🚧Servidor hosting público
    • DHCP
      • DHCP con Ubuntu
      • 🦖DHCP & DNS script
      • DHCP con Alpine
        • Alpine - configuración de red
    • DNS
      • 😡Comprobación DNS
      • Script para enumeración DNS
      • DNS con ubuntu server
      • 🏗️DNSmasq
      • 🚧Securizar servidor DNS
    • Web
      • IIS con Windows server
      • Apache
        • Instalación de LAMP en Ubuntu
          • Prueba de servidor LAMP
          • 🚧Configuración de seguridad de Ubuntu
          • Creación de un VirtualHost en LAMP
          • Creación de varios VirtualHosts en LAMP
          • 🚧Instalación por script de LAMP
        • Aplicaciones con LAMP
          • Instalación de WP en entorno LAMP
          • 🚧Instalación de MantisBT en LAMP
            • 👷Guía de MantisBT
          • 🚧Instalación de QDPM con LAMP
      • Nginx
        • Virtualhosts
        • Instalando Wordpress en nginx
      • 👷MEAN stack
      • 👷‍♂️Caddy
      • 🚧Plesk
      • 🚧Ajenti -Web interface
    • 🏗️Proxy
      • Nginx como proxy inverso y balanceador
      • 🚧Zoraxy
    • Mailing
      • 🚧Servidor Mail con cloudfare
      • 🚧Reenvío de correos de root
      • 🚧Roundcube como MUA
      • Comprobación ESMTP
      • 🚧Seguridad en mailing
      • 🚧Mailhog
    • 🏗️File transfer
      • 🚧FTP
      • Git
    • Sistemas de comunicación instantánea
      • Comunicación mediante CLI
      • Ejabberd - XMPP
        • 🚧Ejabberd con docker
      • 🚧Openfire - XMPP
      • 🚧Comunicaciones servidor-móvil
    • 🏗️Multimedia services
      • Stremio
      • Ver anime por CLI
      • Jellyfin
      • 🚧HLS sobre Apache
      • 🚧Servicio autohospedado de videoconferencia
      • 🚧Morphos: Conversor docs
      • 🚧Reproductores de música en CLI
      • 🚧Icecast - música en streaming
      • 🚧RTMP-HLS server
      • 🚧Guacamole
  • 🖱️Hardware
    • 🚧Identificando conectores
    • Curso de electrónica analógica
    • Alcanzar los 3200MHz con la RAM
    • Calculadora de cuellos de botella
    • 🚧PXE: Bootear sistemas en red
    • 🚧PRÁCTICA - Clonación de disco con Clonezilla
    • Logitech iFixit
  • 🕸️Redes
    • Apuntes IPv4 Alina
    • ¿Cómo diferenciar tantos elementos de red?
    • 🚧IPv6
    • PRÁCTICA - Subneteo con IPcalc en Linux
    • PRÁCTICA - Comandos de red en Windows
    • 🚧PRÁCTICA - Comandos de red en Linux
    • Herramientas de red
      • 🚧TCPDump: analizado de paquetes en red
      • PRÁCTICA - Netsh
      • 🚧PRÁCTICA - mtr.ping.pe
      • 🚧Netcat
    • Wireshark
    • VPN y escritorio remoto
      • Comunicación punto a punto con ngrok
      • 🚧VPN
    • Escaneo de red
      • PRÁCTICA - Mapeado de red con Draw.io
      • 🚧PRÁCTICA - Nmap/Zenmap
    • Redes inalámbricas
      • Wi-fi
        • 🚧PRÁCTICA - Configuración de router
        • 🚧PRÁCTICA - Como hacer un Wifi Heatmap
        • 🚧Seguridad de redes inalámbricas
        • PRÁCTICA - Crackear la contraseña del Wifi con WPA/WPA2
    • PRÁCTICA - Usar SSH en Cisco packet tracer
  • 🛑Ciberseguridad
    • 🚧Securizando un servidor Linux
      • Protégete de ataques de fuerza bruta con Fail2ban
      • Firewall
        • UFW (uncomplicated firewall)
          • GUFW - Interfaz gráfica de ufw
        • 🚧IPTables
        • 🚧PFsense
          • 🚧DMZ con PFsense
      • 🚧Passbolt: gestor de contraseñas autohospedado
      • 🚧Hashes y encriptación
      • 🚧Certificados SSL/TLS
      • Copias de seguridad
    • 🚧Alerta de escaneo de puertos
    • 🚧Google dorks
    • 🚧Enumeración DNS
    • Comandos destructivos de linux
    • Webs enseñanza cyber
    • Wireless Pentesting CheatSheet Github
    • The password game!
    • Personal Security Checklist
  • 🔌Arduino
    • Termómetro e higrómetros digitales y online con Arduino
    • Construyendo un coche multipropósito
      • Multi
      • Montaje del auto
    • Arduino con Sigfox para IoT
    • 10 proyectos de Arduino
  • 📚Recursos y libros
    • Media library: libros varios
    • Herramientas básicas de sysadmin
  • 🌍Sostenibilidad y digitalización
    • Portfolio curso digitalización MOOC
    • 🚧Explotación de recursos por IA
    • 🚧Nuevas tecnologias y comunicaciones
    • 🚧Enlaces sobre Inteligencia artificial
Con tecnología de GitBook
En esta página
  • Estructura y configuración
  • Directorio de Configuración Principal
  • Configuración Básica del Servidor
  • Registro y acceso
  • Parámetros de conexión del servidor
  • Workers
  • Puertos
  • Timeouts
  • Logs
  • Módulos
  • Bloques y condificación
  • Configurar el Puerto (listen)
  • Configurar Nombre de Dominio (server_name)
  • Registro de Accesos (access_log)
  • Configuraciones Misceláneas (gzip, client_max_body_size)
  • Redirecciones (return 301)
  • Servir Archivos Estáticos
  • Proxy Inverso (Reverse Proxy)
  • Servir Archivos Estáticos con Modo Historia en HTML5
  • Configurar SSL
  • Balanceo de Carga (upstream)
  • Redirección Permanente de HTTP a HTTPS
  1. Servicios
  2. Web

Nginx

AnteriorInstalación de QDPM con LAMPSiguienteVirtualhosts

Última actualización hace 4 meses

Nginx es un servidor web y proxy inverso de alto rendimiento. Es conocido por su eficiencia, escalabilidad y capacidad para manejar una gran cantidad de conexiones simultáneas.

Estructura y configuración

Los archivos que se crean dentro de /etc/nginx son los siguientes directorios:

Directorio de Configuración Principal

  • El archivo principal de configuración se encuentra en /etc/nginx/nginx.conf. Este archivo contiene la configuración principal y desde aquí puedes modificar configuraciones globales.

  • /etc/nginx/sites-available y /etc/nginx/sites-enabled: Directorios utilizados para la gestión de sitios virtuales. Los archivos de configuración de sitios virtuales se encuentran en sites-available. Para activar un sitio, se crea un enlace simbólico en sites-enabled.

Configuración Básica del Servidor

Una de las características principales de nginx es que desde el archivo nginx.conf, puedes definir servidores utilizando bloques server { }. Esto se usa para definir la configuración para un servidor web específico o un "sitio virtual".

Cada bloque server se utiliza para configurar cómo Nginx debe responder a las solicitudes entrantes para un determinado conjunto de criterios, como el nombre del servidor, el puerto o la dirección IP.

Esto seria un ejemplo:

server {
    listen 80;
    server_name ejemplo.com www.ejemplo.com;

    location / {
        root /ruta/a/tu/sitio;
        index index.html;
    }
}

El resultado será que al entrar en el dominio a través del puerto 80 se conectará al index.html

Registro y acceso

Como cualquier servidor web y, especialmente, los que tienen funciones de proxy tienen funciones de registro:

  • Los errores se registran en /var/log/nginx/error.log.

  • Los registros de accesos se encuentran en /var/log/nginx/access.log.

Parámetros de conexión del servidor

Workers

Para aprovechar todos los cores de la máquina en la que estemos, es recomendable dejar la opción por defecto. El resultado será que se levanten tantos workers como cores tenga la cpu.

  • Si Nginx está realizando un trabajo intensivo de CPU, como SSL o gzipping, y tiene 2 o más CPU/núcleos, puede establecer worker_processes para que sea igual al número de CPU o núcleos.

  • Si está sirviendo muchos archivos estáticos y el tamaño total de los archivos es mayor que la memoria disponible, puede aumentar worker_processes para utilizar completamente el ancho de banda del disco.

La configuración de los "workers" se realiza en el archivo principal de configuración, comúnmente llamado nginx.conf, añade para que vaya en función de todos los nucleos:

worker_processes auto;

Los worker processes con subrutinas que controlan el flujo de procesamiento del servidor:

  • Los worker processes de Nginx manejan la solicitud entrante.

  • Puede ir más allá de los núcleos disponibles si tiene acceso de E/S.

  • Respecto a los worker_connections:

    • Cada worker process puede abrir de forma predeterminada 512 conexiones.

    • Puede cambiar este límite con worker_connections <NUM>;

    • Puede establecer el límite máximo con: ulimit -n

    • por lo tanto podemos calcular que:

max_clients = worker processes * worker connections

Puertos

listen 80 default_server;
#o bien:
listen [::]:80 default_server ipv6only=on;

Timeouts

Dependiendo del rol que tenga nginx en tu arquitectura ( como Proxy , como servidor de estáticos, etc…) habrá que tener en cuenta en qué bloque y qué valor de configuración tomamos.

  • keepalive_timeout 10; (default 75)

  • keepalive_requests 1024; (default 100)

  • client_header_timeout 10; (default 60)

  • client_body_timeout 10; (default 60)

  • send_timeout 10; (default 60)

  • sendfile on; (default off)

  • tcp_nopush on; (default off)

  • tcp_nodelay on; (default on)

Logs

Dentro del archivo de configuración básica de nginx.conf se añade:

http {
    # Otras configuraciones de HTTP aquí...

        # Default error log file
        # (this is only used when you don't override error_log on a server{} level)
        error_log  logs/error.log warn;
        # Format to use in log files
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        # Default log file
        # (this is only used when you don't override access_log on a server{} level)
        access_log logs/access.log main;
    
    # Resto de la configuración...
    
    server {
        # Configuraciones del servidor...

        location / {
            # Configuraciones de la ubicación...
        }
    }
}

Módulos

Nginx, como mejora de Apache, permite ampliar su funcionalidad por medio del uso de módulos. Algunos de los módulos más importantes que nos podemos encontrar son:

  • HTTP Referer. Filtra peticiones recibidas en función de la cabecera Referer.

  • HTTP Limit Zone. Limita el número de conexiones simultáneas desde un mismo cliente.

  • User ID. Proporciona cookies identificativas.

  • FLV. Permite reproducir vídeo en streaming.

  • Perl. Módulo que permite ejecutar Perl directamente dentro de Nginx.

  • Secure Link. Este módulo ofrece la posibilidad de proteger páginas mediante clave secreta.


Bloques y condificación

Resumen de codigos de configuración de nginx con ejemplos:

Configurar el Puerto (listen)

server {
    # Protocolo HTTP estándar
    listen 80;

    # Protocolo HTTPS estándar
    listen 443 ssl;

    # Escuchar en IPv6 en el puerto 80
    listen [::]:80;

    # Escuchar solo en IPv6
    listen [::]:80 ipv6only=on;
}

Configurar Nombre de Dominio (server_name)

server {
    # Escuchar solicitudes de un dominio específico
    server_name yourdomain.com;

    # Escuchar múltiples dominios
    server_name yourdomain.com www.yourdomain.com;

    # Escuchar todos los subdominios
    server_name *.yourdomain.com;

    # Escuchar todos los dominios de nivel superior
    server_name yourdomain.*;

    # Escuchar cuando no se especifica un nombre de host (usa la IP del servidor)
    server_name "";
}

Registro de Accesos (access_log)

server {
    # Ruta relativa o absoluta del archivo de log
    access_log /ruta/al/archivo.log;

    # Activar o desactivar logging
    access_log on;
}

Configuraciones Misceláneas (gzip, client_max_body_size)

server {
    # Activar o desactivar compresión gzip
    gzip on;

    # Limitar el tamaño del cuerpo de la solicitud del cliente a 10MB
    client_max_body_size 10M;
}

Redirecciones (return 301)

server {
    listen 80;
    server_name www.yourdomain.com;

    # Redirigir a dominio sin 'www'
    return 301 http://yourdomain.com$request_uri;
}

server {
    listen 80;
    server_name yourdomain.com;

    location /redirect-url {
        # Redirigir a otro dominio
        return 301 http://otherdomain.com;
    }
}

Servir Archivos Estáticos

server {
    listen 80;
    server_name yourdomain.com;

    location / {
        root /ruta/a/sitio-web;
    }
}

Proxy Inverso (Reverse Proxy)

server {
    listen 80;
    server_name yourdomain.com;

    location / {
        # Redirigir tráfico a un servidor Node.js en el puerto 3000
        proxy_pass http://0.0.0.0:3000;
    }
}

Servir Archivos Estáticos con Modo Historia en HTML5

server {
    listen 80;
    server_name yourdomain.com;

    root /ruta/a/sitio-web;
}

Configurar SSL

server {
    listen 443 ssl;
    server_name yourdomain.com;

    location / {
        try_files $uri $uri/ /index.html;
    }

    ssl on;
    ssl_certificate /ruta/al/certificado.pem;
    ssl_certificate_key /ruta/a/clave_privada.pem;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /ruta/a/fullchain.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;

    # Seguridad adicional
    add_header Strict-Transport-Security "max-age=15768000";
}

Balanceo de Carga (upstream)

upstream node_js {
    server 0.0.0.0:3000;
    server 0.0.0.0:4000;
    server 123.131.121.122;
}

server {
    listen 80;
    server_name yourdomain.com;

    location / {
        proxy_pass http://node_js;
    }
}

Redirección Permanente de HTTP a HTTPS

server {
    listen 80;
    server_name yourdomain.com;

    return 301 https://$host$request_uri;
}

Este documento es ahora más estructurado y fácil de leer. ¡Déjame saber si necesitas modificaciones! 🚀

Referencia:

Dentro de un bloque server añade las siguientes líneas tal y como se ha visto en el:

Vamos a tomar como referencia este , pero tened en cuenta que estos no son los únicos parámetros:

WebDAV. Ofrece soporte para .

XSLT. Funcionalidad que permite el post-procesamiento de páginas mediante

🗃️
ejemplo anterior
post
WebDAV
XSLT
https://youtu.be/D5grhfkjjXE?si=FSSbceztNeZoCAxC
Arquitectura típica de nginx
Directorios de nginx