Nginx

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.

Arquitectura típica de nginx

Estructura y configuración

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

Directorios de nginx

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:

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:

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:

Puertos

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

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.

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

  • 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:

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.

  • WebDAV. Ofrece soporte para WebDAV.

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

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


Bloques y condificación

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

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


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

Referencia:

Última actualización