Módulo Core#

El módulo proporciona la funcionalidad esencial y las directivas de configuración necesarias para la operación básica del servidor, y gestiona tareas críticas como la gestión de procesos de trabajo, la configuración de modelos orientados a eventos y el procesamiento de conexiones y solicitudes entrantes. Incluye directivas clave para configurar el proceso principal, el registro de errores y el control del comportamiento del servidor a bajo nivel.

Ejemplo de Configuración#

user www www;
worker_processes 2;

error_log /var/log/error.log info;

events {

    use kqueue; worker_connections 2048;
}

Directivas#

accept_mutex#

Sintaxis

accept_mutex on | off;

Predeterminado

accept_mutex off;

Contexto

events

Cuando accept_mutex está habilitado, los procesos de trabajo aceptarán nuevas conexiones por turno. Sin esta opción, todos los procesos de trabajo son notificados de nuevas conexiones, lo que puede conducir a un uso ineficiente de los recursos del sistema si el volumen de conexiones nuevas es bajo.

Nota

No es necesario habilitar accept_mutex en sistemas que admiten la bandera EPOLLEXCLUSIVE o cuando se utiliza la directiva reuseport.

accept_mutex_delay#

Sintaxis

accept_mutex_delay tiempo;

Predeterminado

accept_mutex_delay 500ms;

Contexto

events

Si accept_mutex está habilitado, esta directiva especifica el tiempo máximo que un proceso de trabajo esperará para continuar aceptando nuevas conexiones mientras otro proceso de trabajo ya está manejando las nuevas conexiones.

daemon#

Sintaxis

daemon on | off;

Predeterminado

daemon on;

Contexto

main

Determina si Angie debe ejecutarse como un demonio. Esto se utiliza principalmente durante el desarrollo.

debug_connection#

Sintaxis

debug_connection dirección | CIDR | unix:;

Predeterminado

Contexto

events

Habilita los registros de depuración para conexiones de clientes específicas. Otras conexiones utilizarán el nivel de registro establecido por la directiva error_log. Puede especificar conexiones por dirección IPv4 o IPv6, red o nombre de host. Para conexiones que utilicen sockets de dominio UNIX, utilice el parámetro unix: para habilitar los registros de depuración.

events {

    debug_connection 127.0.0.1;
    debug_connection localhost;
    debug_connection 192.0.2.0/24;
    debug_connection ::1;
    debug_connection 2001:0db8::/32;
    debug_connection unix:;
    #  ...
}

Nota

Para que esta directiva funcione, Angie debe estar compilada con el registro de depuración habilitado.

debug_points#

Sintaxis

debug_points abort | stop;

Predeterminado

Contexto

main

Esta directiva se utiliza para depuración.

Cuando ocurre un error interno, como una fuga de socket durante los reinicios del proceso de trabajo, habilitar debug_points creará un archivo core (abort) o detendrá el proceso (stop) para un análisis posterior con un depurador del sistema.

env#

Sintaxis

env variable[=valor];

Predeterminado

env TZ;

Contexto

main

Por defecto, Angie elimina todas las variables de entorno heredadas de su proceso padre excepto la variable TZ. Esta directiva le permite conservar algunas variables heredadas, modificar sus valores o crear nuevas variables de entorno.

Estas variables son entonces:

Tenga en cuenta que controlar las bibliotecas del sistema de esta manera puede no ser siempre efectivo, ya que las bibliotecas a menudo verifican las variables solo durante la inicialización, que ocurre antes de que esta directiva surta efecto. La variable TZ siempre se hereda y es accesible para el módulo Perl a menos que se configure explícitamente lo contrario.

Ejemplo:

env MALLOC_OPTIONS;
env PERL5LIB=/data/site/modules;
env OPENSSL_ALLOW_PROXY_CERTS=1;

Nota

La variable de entorno ANGIE se utiliza internamente por Angie y no debe ser establecida directamente por el usuario.

error_log#

Sintaxis

error_log file [level];

Predeterminado

error_log logs/error.log error; (la ruta depende de la opción de compilación --error-log-path build option)

Contexto

main, http, mail, stream, server, location

Configura el registro de logs, permitiendo especificar múltiples logs en el mismo nivel de configuración. Si no se define explícitamente un archivo de log en el nivel de configuración main, se utilizará el archivo predeterminado.

El primer parámetro especifica el archivo donde almacenar el log. El valor especial stderr selecciona la salida de error estándar. Para configurar el registro en syslog, utilice el prefijo "syslog:". Para registrar en un buffer cíclico de memoria, utilice el prefijo "memory:" seguido del tamaño del buffer; esto se utiliza típicamente para depuración.

El segundo parámetro establece el nivel de registro, que puede ser uno de los siguientes: debug, info, notice, warn, error, crit, alert, o emerg. Estos niveles están listados en orden de gravedad creciente. Establecer un nivel de log capturará mensajes de igual y mayor gravedad:

Configuración

Niveles Capturados

debug

debug, info, notice, warn, error, crit, alert, emerg

info

info, notice, warn, error, crit, alert, emerg

notice

notice, warn, error, crit, alert, emerg

warn

warn, error, crit, alert, emerg

error

error, crit, alert, emerg

crit

crit, alert, emerg

alert

alert, emerg

emerg

emerg

Si este parámetro se omite, se usa error como nivel de registro predeterminado.

Nota

Para que el nivel de registro debug funcione, Angie debe estar compilada con el registro de depuración habilitado.

events#

Sintaxis

events { ... };

Predeterminado

Contexto

main

Proporciona el contexto del archivo de configuración para directivas que afectan al procesamiento de conexiones.

include#

Sintaxis

include file | mask;

Predeterminado

Contexto

any

Incluye otro archivo, o archivos que coincidan con la máscara especificada, en la configuración. Los archivos incluidos deben contener directivas y bloques sintácticamente correctos.

Ejemplo:

include mime.types;
include vhosts/*.conf;

load_module#

Sintaxis

load_module file;

Predeterminado

Contexto

main

Carga un módulo dinámico desde el archivo especificado. Si se proporciona una ruta relativa, se interpreta según la opción de compilación --prefix build option. Para verificar la ruta:

$ sudo angie -V

Ejemplo:

load_module modules/ngx_mail_module.so;

lock_file#

Sintaxis

lock_file file;

Predeterminado

lock_file logs/angie.lock; (la ruta depende de la opción de compilación --lock-path build option)

Contexto

main

Angie utiliza un mecanismo de bloqueo para implementar accept_mutex y serializar el acceso a la memoria compartida. En la mayoría de los sistemas, los bloqueos se gestionan mediante operaciones atómicas, lo que hace innecesaria esta directiva. En ciertos sistemas, sin embargo, se utiliza un mecanismo alternativo de `archivo de bloqueo`. Esta directiva establece un prefijo para los nombres de archivos de bloqueo.

master_process#

Sintaxis

master_process on | off;

Predeterminado

master_process on;

Contexto

main

Determina si se inician procesos de trabajo. Esta directiva está destinada para desarrolladores de Angie.

multi_accept#

Sintaxis

multi_accept on | off;

Predeterminado

multi_accept off;

Contexto

events

on

Un proceso de trabajo aceptará todas las nuevas conexiones simultáneamente.

off

Un proceso de trabajo aceptará una nueva conexión a la vez.

Nota

Esta directiva se ignora si se utiliza el método de procesamiento de conexiones kqueue, ya que proporciona el número de nuevas conexiones listas para ser aceptadas.

pcre_jit#

Sintaxis

pcre_jit on | off;

Predeterminado

pcre_jit off;

Contexto

main

Habilita o deshabilita la "compilación just-in-time" (PCRE JIT) para expresiones regulares conocidas en el momento del análisis de la configuración.

La PCRE JIT puede acelerar significativamente el procesamiento de expresiones regulares.

Nota

JIT está disponible en las bibliotecas PCRE desde la versión 8.20, siempre que se haya compilado con la opción de configuración --enable-jit. Cuando Angie se compila con la biblioteca PCRE (--with-pcre=), el soporte JIT se habilita mediante la opción --with-pcre-jit.

pid#

Sintaxis

pid file | off;

Predeterminado

pid logs/angie.pid; (la ruta depende de la opción de compilación --pid-path build option)

Contexto

main

Especifica el archivo que almacenará el ID del proceso principal de Angie. El archivo se crea atómicamente, lo que garantiza que su contenido siempre sea correcto. La opción off desactiva la creación de este archivo.

Nota

Si se modifica el valor de file durante la reconfiguración pero apunta a un enlace simbólico del PID anterior, el archivo no se volverá a crear.

ssl_engine#

Sintaxis

ssl_engine device;

Predeterminado

Contexto

main

Especifica el nombre del acelerador de hardware SSL.

ssl_object_cache_inheritable#

Sintaxis

ssl_object_cache_inheritable on | off;

Predeterminado

ssl_object_cache_inheritable on;

Contexto

main

Si está habilitado, los objetos SSL (certificados SSL, claves secretas, certificados CA de confianza, listas CRL) se heredan a través de las recargas de configuración.

Los objetos SSL cargados desde archivos se heredan si su tiempo de modificación e índice de archivo no han cambiado desde la carga de configuración anterior. Las claves secretas especificadas como engine:name:id nunca se heredan, mientras que las claves secretas especificadas como data:value siempre se heredan.

Los objetos SSL cargados desde variables no pueden heredarse.

Ejemplo:

ssl_object_cache_inheritable on;

http {
    server {
        ssl_certificate     example.com.crt;
        ssl_certificate_key example.com.key;
    }
}

thread_pool#

Sintaxis

thread_pool name threads=number [max_queue=number];

Predeterminado

thread_pool default threads=32 max_queue=65536;

Contexto

main

Define el name y los parámetros de un grupo de hilos utilizado para la lectura y envío de archivos multihilo (sin bloqueo), para los procesos de trabajo.

El parámetro threads define el número de hilos en el grupo.

Si todos los hilos del grupo están ocupados ejecutando tareas, las nuevas tareas esperan en una cola. El parámetro max_queue limita el número de tareas permitidas para esperar en la cola. Por defecto, hasta 65536 tareas pueden estar en la cola. Cuando la cola se desborda, la tarea se completa con un error.

timer_resolution#

Sintaxis

timer_resolution interval;

Predeterminado

Contexto

main

Reduce la resolución del temporizador en los procesos de trabajo, reduciendo así el número de llamadas al sistema gettimeofday(). Por defecto, gettimeofday() se llama cada vez que se recibe un evento del kernel. Con resolución reducida, gettimeofday() solo se llama una vez por intervalo especificado.

Ejemplo:

timer_resolution 100ms;

La implementación interna del intervalo depende del método utilizado:

  • el filtro EVFILT_TIMER si se usa kqueue;

  • timer_create() si se usa eventport;

  • setitimer() en otros casos.

use#

Sintaxis

use method;

Predeterminado

Contexto

events

Especifica el método a utilizar para el procesamiento de conexiones. Normalmente no hay necesidad de especificarlo explícitamente, porque Angie utilizará por defecto el método más eficiente.

user#

Sintaxis

user usuario [grupo];

Predeterminado

user <build parameter --user> <build parameter --group>;

Contexto

main

Define las credenciales de usuario y grupo utilizadas por los procesos de trabajo (también ver parámetros de compilación). Si se omite grupo, se utiliza un grupo cuyo nombre es igual al de usuario.

worker_aio_requests#

Sintaxis

worker_aio_requests number;

Predeterminado

worker_aio_requests 32;

Contexto

events

Cuando se utiliza aio con el método de procesamiento de conexiones epoll, establece el número máximo de operaciones de E/S asíncronas pendientes para un solo proceso de trabajo.

worker_connections#

Sintaxis

worker_connections number;

Predeterminado

worker_connections 512;

Contexto

events

Establece el número máximo de conexiones simultáneas que puede abrir un proceso de trabajo.

Debe tenerse en cuenta que este número incluye todas las conexiones (por ejemplo, conexiones con servidores proxy, entre otras), no solo las conexiones con clientes. Otra consideración es que el número real de conexiones simultáneas no puede exceder el límite actual del número máximo de archivos abiertos, que puede cambiarse mediante worker_rlimit_nofile.

worker_cpu_affinity#

Sintaxis

worker_cpu_affinity cpumask ...;

worker_cpu_affinity auto [cpumask];

Predeterminado

Contexto

main

Vincula los procesos de trabajo a conjuntos de CPUs. Cada conjunto de CPU está representado por una máscara de bits de CPUs permitidas. Debe definirse un conjunto separado para cada uno de los procesos de trabajo. Por defecto, los procesos de trabajo no están vinculados a ninguna CPU específica.

Por ejemplo:

worker_processes    4;
worker_cpu_affinity 0001 0010 0100 1000;

Esta configuración vincula cada proceso de trabajo a una CPU separada.

Alternativamente:

worker_processes    2;
worker_cpu_affinity 0101 1010;

Esto vincula el primer proceso de trabajo a CPU0 y CPU2, y el segundo proceso de trabajo a CPU1 y CPU3. Esta configuración es adecuada para hyper-threading.

El valor especial auto permite vincular automáticamente los procesos de trabajo a las CPUs disponibles:

worker_processes auto;
worker_cpu_affinity auto;

El parámetro opcional de máscara puede utilizarse para limitar las CPUs disponibles para la vinculación automática:

worker_cpu_affinity auto 01010101;

Nota

La directiva solo está disponible en FreeBSD y Linux.

worker_priority#

Sintaxis

worker_priority number;

Predeterminado

worker_priority 0;

Contexto

main

Define la prioridad de planificación para los procesos de trabajo, tal como lo hace el comando nice: un número negativo significa mayor prioridad. El rango permitido normalmente varía de -20 a 20.

Ejemplo:

worker_priority -10;

worker_processes#

Sintaxis

worker_processes number | auto;

Predeterminado

worker_processes 1;

Contexto

main

Define el número de procesos de trabajo.

El valor óptimo depende de muchos factores, incluyendo (pero no limitado a) el número de núcleos de CPU, el número de discos duros que almacenan datos, y el patrón de carga. En caso de duda, establecerlo al número de núcleos de CPU disponibles sería un buen inicio (el valor "auto" intentará detectarlo automáticamente).

worker_rlimit_core#

Sintaxis

worker_rlimit_core size;

Predeterminado

Contexto

main

Cambia el límite del tamaño máximo de un archivo core (RLIMIT_CORE) para los procesos de trabajo. Se utiliza para aumentar el límite sin reiniciar el proceso principal.

worker_rlimit_nofile#

Sintaxis

worker_rlimit_nofile number;

Predeterminado

Contexto

main

Cambia el límite del número máximo de archivos abiertos (RLIMIT_NOFILE) para los procesos de trabajo. Se utiliza para aumentar el límite sin reiniciar el proceso principal.

worker_shutdown_timeout#

Sintaxis

worker_shutdown_timeout time;

Predeterminado

Contexto

main

Configura un tiempo de espera en segundos para un apagado ordenado de los procesos de trabajo. Cuando el tiempo especificado expira, Angie intentará cerrar todas las conexiones actualmente abiertas para facilitar el apagado.

El apagado ordenado se inicia enviando una señal QUIT al proceso principal, que indica a los procesos de trabajo que dejen de aceptar nuevas conexiones y permite que las conexiones existentes se completen. Los procesos de trabajo continúan manejando las solicitudes activas hasta que finalicen, y luego se apagan de manera ordenada. Si las conexiones permanecen abiertas más tiempo que worker_shutdown_timeout, Angie cerrará estas conexiones forzosamente para completar el apagado. Además, las conexiones keep-alive del cliente se cierran solo si han estado inactivas durante al menos el tiempo especificado por lingering_timeout.

working_directory#

Sintaxis

working_directory directory;

Predeterminado

Contexto

main

Define el directorio de trabajo actual para un proceso de trabajo. Se utiliza principalmente al escribir un archivo de volcado de memoria (core file), en cuyo caso un proceso de trabajo debe tener permiso de escritura para el directorio especificado.