Proxy#
Permite reenviar solicitudes a otro servidor (proxy). Hace que las conexiones salientes hacia un servidor proxy se originen desde la dirección IP local especificada, con un puerto opcional. El valor del parámetro puede contener variables. El valor especial El parámetro Para que este parámetro funcione, normalmente es necesario ejecutar los procesos worker de Angie con privilegios de superusuario. En Linux no es necesario, ya que si se especifica el parámetro Nota Es necesario configurar la tabla de enrutamiento del kernel para interceptar el tráfico de red desde el servidor proxy. Define el tamaño del buffer usado para leer la primera parte de la respuesta recibida del servidor proxy. Esta parte normalmente contiene una cabecera pequeña de respuesta. Por defecto, el tamaño del buffer es igual a una página de memoria, es decir, 4K o 8K según la plataforma. Puede configurarse más pequeño. Habilita o deshabilita el buffering de respuestas desde el servidor proxy. Angie recibe una respuesta del servidor proxy tan pronto como sea posible, guardándola en los buffers configurados por las directivas proxy_buffer_size y proxy_buffers. Si la respuesta completa no cabe en memoria, parte de ella puede guardarse en un archivo temporal en disco. La escritura en archivos temporales está controlada por las directivas proxy_max_temp_file_size y proxy_temp_file_write_size. La respuesta se pasa al cliente de forma síncrona, inmediatamente a medida que se recibe. Angie no intentará leer la respuesta completa del servidor proxy. El tamaño máximo de datos que Angie puede recibir del servidor en un momento está definido por la directiva proxy_buffer_size. El buffering también puede activarse o desactivarse pasando "yes" o "no" en la cabecera de respuesta Predeterminado http, server, location Define el número y el tamaño de los buffers usados para leer una respuesta del servidor proxy, por cada conexión. Por defecto, el tamaño del buffer es igual a una página de memoria (4K o 8K, dependiendo de la plataforma). Predeterminado http, server, location Cuando el buffering de respuestas desde el servidor proxy está habilitado, limita el tamaño total de buffers que pueden estar ocupados enviando una respuesta al cliente mientras la respuesta aún no se ha leído completamente. Mientras tanto, el resto de los buffers pueden usarse para leer la respuesta y, si es necesario, almacenarla en un archivo temporal. Por defecto, el tamaño está limitado al de dos buffers configurados por las directivas proxy_buffer_size y proxy_buffers. Predeterminado http, server, location Define una zona de memoria compartida usada para la caché.
La misma zona puede usarse en varios lugares.
El valor del parámetro puede contener variables. deshabilita la caché heredada de un nivel de configuración anterior. Added in version 1.2.0: PRO En Angie PRO, se pueden especificar múltiples directivas proxy_cache_path
que usen el mismo valor de El valor se evalúa en el momento de almacenar en caché la respuesta del backend
y se espera que use variables, incluidas aquellas que contienen
información de la respuesta. Si la respuesta se toma de la caché, el path no se reevalúa;
por lo tanto, una respuesta en caché conserva su path original
hasta que sea eliminada de la caché. Esto permite seleccionar la ruta de caché necesaria aplicando directivas map
o scripts a las respuestas del backend. Ejemplo con Aquí hay dos rutas de caché y un mapeo variable para distinguir entre ellas.
Si Nota Al usar proxy_cache,
normalmente también necesita establecer la directiva proxy_cache_valid
para especificar explícitamente el tiempo de almacenamiento en caché de las respuestas.
Si no se configura, Angie no usa valores predeterminados,
sino que determina el tiempo de almacenamiento en caché
basándose en las cabeceras HTTP de la respuesta del servidor en el siguiente orden de prioridad: La cabecera La cabecera La cabecera Si ninguna de estas cabeceras contiene valores válidos o no están presentes,
la respuesta no se almacenará en caché porque no puede determinarse su tiempo de expiración. Predeterminado http, server, location Permite iniciar una subpetición en segundo plano para actualizar un elemento
caducado de la caché, mientras se devuelve al cliente una respuesta obsoleta. Advertencia El uso de una respuesta obsoleta mientras se actualiza debe estar permitido. Define condiciones bajo las cuales la respuesta no se tomará de la caché.
Si al menos uno de los valores de los parámetros de tipo cadena no está vacío y no es igual a "0", entonces la respuesta no se tomará de la caché: Puede usarse junto con la directiva proxy_no_cache. Predeterminado http, server, location Habilita o deshabilita la conversión del método "HEAD" a "GET" para el almacenamiento en caché.
Si la conversión está deshabilitada, la clave de caché debe incluir la $request_method. Predeterminado http, server, location Define una clave para la caché, por ejemplo: Por defecto, el valor de la directiva es cercano a la cadena: Cuando está habilitado, solo se permitirá que una solicitud a la vez llene un nuevo elemento de caché identificado según la directiva proxy_cache_key, enviando una solicitud al servidor proxy.
Otras solicitudes para el mismo elemento de caché esperarán a que aparezca una respuesta en la caché o a que se libere el bloqueo de caché para ese elemento, hasta el tiempo establecido por la directiva proxy_cache_lock_timeout. Predeterminado http, server, location Si la última solicitud enviada al servidor proxy para llenar un nuevo elemento de caché no se ha completado en el tiempo especificado, puede enviarse otra solicitud al servidor proxy. Predeterminado http, server, location Define un tiempo de espera para proxy_cache_lock.
Cuando expira el tiempo, la solicitud se enviará al servidor proxy, sin embargo, la respuesta no se almacenará en la caché. Define un desplazamiento en bytes para solicitudes de rango de bytes.
Si el rango está más allá del desplazamiento especificado, la solicitud de rango se enviará al servidor proxy y la respuesta no se almacenará en la caché. Predeterminado http, server, location Si el método de la solicitud del cliente está en la lista definida por esta directiva, entonces la respuesta se almacenará en caché.
Los métodos "GET" y "HEAD" siempre se añaden a la lista, pero se recomienda especificarlos explícitamente. Véase también la directiva proxy_no_cache. Predeterminado http, server, location Define el número de solicitudes tras el cual la respuesta se almacenará en caché. Predeterminado — http Define la ruta y otros parámetros de la caché.
Los datos de la caché se almacenan en archivos. El nombre del archivo en caché es el resultado de aplicar la función MD5 a la clave de caché. define niveles jerárquicos de la caché: de 1 a 3, cada nivel acepta valores 1 o 2. Por ejemplo, en la siguiente configuración: Los nombres de archivo en caché tendrán este aspecto: Una respuesta cacheada primero se escribe en un archivo temporal y luego se renombra.
Los archivos temporales y la caché pueden colocarse en diferentes sistemas de archivos.
Sin embargo, en este caso un archivo se copia entre dos sistemas de archivos en lugar de una operación de renombrado económico.
Por tanto, se recomienda que tanto la caché como el directorio que contiene archivos temporales estén en el mismo sistema de archivos. Define el directorio para archivos temporales Si este parámetro se omite o se establece en Los archivos temporales se colocarán directamente en el directorio de la caché. Define el nombre y tamaño de la zona de memoria compartida que almacena todas las claves activas e información sobre los datos. Una zona de un megabyte puede almacenar unas 8.000 claves. Cuando se usa el parámetro opcional file con Si la zona no puede restaurarse debido a un cambio de tamaño,
incompatibilidad binaria u otras razones,
Angie registrará una advertencia ( Advertencia Asegúrese de que la ruta del file esté especificada correctamente
y tenga los permisos necesarios para que Angie pueda usarla,
y que esté protegida contra accesos no autorizados;
las rutas relativas se basan en el prefijo. Si los datos de la caché no se acceden durante el tiempo especificado por este parámetro, los datos se eliminan independientemente de su vigencia. Por defecto, Nota Added in version 1.2.0: PRO En Angie PRO, se pueden especificar múltiples directivas proxy_cache_path con el mismo valor de Un proceso especial cache manager monitoriza el tamaño máximo de la caché y el espacio libre mínimo en el sistema de archivos con la caché, eliminando los datos menos utilizados cuando se supera el tamaño máximo o cuando hay espacio insuficiente.
El proceso de eliminación funciona en iteraciones. valor máximo de tamaño de caché valor mínimo de espacio libre en el sistema de archivos con la caché número máximo de elementos de caché a eliminar en una iteración Por defecto: limita la duración de una iteración Por defecto: configura una pausa entre iteraciones Por defecto: Un minuto después de iniciar Angie, se activa un proceso especial cache loader.
Este escanea el sistema de archivos en busca de datos previamente almacenados en caché y carga esta información en la zona de caché.
El proceso trabaja iterativamente;
cada iteración procesa un número limitado de elementos definido por el parámetro número máximo de elementos de caché a cargar en una iteración Por defecto: limita la duración de una iteración Por defecto: configura una pausa entre iteraciones Por defecto: Nota Especificar el file para el parámetro Predeterminado http, server, location Habilita la revalidación de los elementos de caché expirados usando solicitudes condicionales con los campos de cabecera Predeterminado http, server, location Determina en qué casos puede usarse una respuesta caducada de la caché.
Los parámetros de la directiva coinciden con los de la directiva proxy_next_upstream. permite usar una respuesta caducada de la caché si no puede seleccionarse un servidor proxy para procesar una solicitud. parámetro adicional, permite usar una respuesta caducada si se está actualizando en ese momento. Esto permite minimizar el número de accesos a los servidores proxy durante la actualización de datos cacheados. El uso de una respuesta caducada también puede habilitarse directamente en la cabecera de respuesta por un número de segundos especificado después de que la respuesta haya caducado: La extensión stale-while-revalidate del campo de cabecera La extensión stale-if-error del campo de cabecera Nota Esto tiene menor prioridad que los parámetros definidos en la directiva. Para minimizar el número de accesos a los servidores proxy al poblar un nuevo elemento de caché, puede usarse la directiva proxy_cache_lock. Define el tiempo de almacenamiento en caché para diferentes códigos de respuesta.
Por ejemplo, las siguientes directivas: definen 10 minutos de caché para respuestas con códigos 200 y 302, y 1 minuto para respuestas con código 404. Si solo se especifica el tiempo de caché: entonces solo las respuestas 200, 301 y 302 se almacenan en caché. Además, se puede especificar el parámetro Nota Los parámetros de almacenamiento en caché también pueden establecerse directamente en la cabecera de respuesta.
Esto tiene mayor prioridad que el tiempo de caché definido en la directiva. El campo de cabecera Si la cabecera no incluye el campo Si la cabecera incluye el campo Si la cabecera incluye el campo El procesamiento de uno o más de estos campos de cabecera de respuesta puede deshabilitarse mediante la directiva proxy_ignore_headers. Predeterminado http, server, location Define un tiempo de espera para establecer una conexión con un servidor proxy.
Debe tenerse en cuenta que este tiempo de espera normalmente no puede exceder los 75 segundos. Predeterminado http, server, location Habilita la finalización de todas las conexiones con el servidor proxy después de que se haya eliminado del grupo o se haya marcado como permanentemente no disponible mediante un proceso de reresolve o el comando API Una conexión se termina cuando se procesa el siguiente evento de lectura o escritura, ya sea para el cliente o para el servidor proxy. Definir time habilita un tiempo de espera para la finalización de la conexión;
con Predeterminado http, server, location Habilita el soporte de rangos de bytes para respuestas cacheadas y no cacheadas desde el servidor proxy, independientemente del campo Predeterminado http, server, location Define el tamaño del bucket para las tablas hash usadas por las directivas proxy_hide_header y proxy_set_header.
Los detalles de la configuración de tablas hash se describen por separado. Predeterminado http, server, location Define el tamaño máximo de las tablas hash usadas por las directivas proxy_hide_header y proxy_set_header.
Los detalles de la configuración de tablas hash se describen por separado. De forma predeterminada, Angie no pasa los campos de cabecera Predeterminado http, server, location, if in location, limit_except Define la versión del protocolo HTTP para el proxy.
Por defecto, se usa la versión 1.0.
Se recomienda usar la versión 1.1 o superior junto con conexiones keepalive. Activa el modo especial de negociación Advertencia Active este modo solo para ejecutar pruebas especializadas que lo requieran explícitamente. Predeterminado http, server Inicializa los parámetros de HTTP/3 y QUIC,
y define el número máximo de flujos de solicitudes HTTP/3 concurrentes en una conexión.
Requiere habilitar conexiones keepalive. Predeterminado http, server, location Define la capacidad de la tabla dinámica para conexiones proxy. Nota Una directiva similar, http3_max_table_capacity,
establece este valor para las conexiones de servidor.
Para evitar errores, el uso de tablas dinámicas se desactiva cuando la caché está habilitada en modo proxy. Predeterminado http, server Define el tamaño del búfer usado para leer y escribir flujos QUIC. Predeterminado http, server, location Determina si debe cerrarse la conexión con el servidor proxy cuando el cliente cierra la conexión sin esperar la respuesta. Desactiva el procesamiento de ciertos campos de cabecera de respuesta provenientes del servidor proxy.
Los siguientes campos pueden ignorarse: Si no se desactiva, el procesamiento de estos campos de cabecera tiene los siguientes efectos: Predeterminado http, server, location Determina si las respuestas proxy con códigos mayores o iguales a 300 deben pasarse al cliente o interceptarse y redirigirse a Angie para su procesamiento con la directiva error_page. Limita la velocidad de lectura de la respuesta desde el servidor proxy.
El rate se especifica en bytes por segundo y puede contener variables. desactiva la limitación de velocidad Nota El límite se aplica por petición, por lo que si Angie abre dos conexiones simultáneamente al servidor proxy, la velocidad total será el doble del límite especificado.
Esta limitación solo funciona si el buffering de respuestas del servidor proxy está habilitado. Predeterminado http, server, location Cuando el buffering de respuestas del servidor proxy está habilitado y la respuesta completa no cabe en los búferes definidos por las directivas proxy_buffer_size y proxy_buffers, una parte de la respuesta puede guardarse en un archivo temporal.
Esta directiva define el tamaño máximo del archivo temporal.
El tamaño de los datos escritos al archivo temporal en una sola operación se controla mediante la directiva proxy_temp_file_write_size. desactiva el almacenamiento en archivos temporales Nota Esta restricción no se aplica a las respuestas que serán cacheadas o almacenadas en disco. Especifica el método HTTP que se usará en las solicitudes enviadas al servidor proxy en lugar del método de la solicitud del cliente.
El valor del parámetro puede contener variables. Predeterminado http, server, location Especifica en qué casos una petición debe pasarse al siguiente servidor en el grupo upstream: ocurrió un error al establecer la conexión, al enviar la petición o al leer la cabecera de respuesta. ocurrió un tiempo de espera al establecer la conexión, al enviar la petición o al leer la cabecera de respuesta. el servidor devolvió una respuesta vacía o inválida. el servidor devolvió un código 500. el servidor devolvió un código 502. el servidor devolvió un código 503. el servidor devolvió un código 504. el servidor devolvió un código 403. el servidor devolvió un código 404. el servidor devolvió un código 429. normalmente, las solicitudes con métodos no idempotentes ( desactiva el reenvío al siguiente servidor. Nota Debe tenerse en cuenta que reenviar una solicitud al siguiente servidor solo es posible si aún no se ha enviado nada al cliente.
Es decir, si ocurre un error o timeout durante la transmisión de la respuesta, no es posible recuperarse. La directiva también define qué se considera un intento fallido de comunicación con un servidor. siempre considerados intentos fallidos, aunque no estén en la directiva considerados intentos fallidos solo si están especificados en la directiva nunca considerados intentos fallidos El reenvío a otro servidor puede limitarse mediante el número de intentos y el tiempo. Predeterminado http, server, location Limita el tiempo durante el cual una petición puede reenviarse al siguiente servidor. desactiva esta limitación Predeterminado http, server, location Limita el número de intentos posibles de reenviar una petición al siguiente servidor. desactiva esta limitación Define condiciones bajo las cuales la respuesta no será guardada en caché.
Si al menos un valor de los parámetros de cadena no está vacío y no es igual a "0", la respuesta no será almacenada: Puede usarse junto con la directiva proxy_cache_bypass. Define el protocolo y la dirección de un servidor proxy y un URI opcional al que debe mapearse una ubicación.
Como protocolo se puede especificar o como una ruta de socket de dominio UNIX especificada tras la palabra Si un nombre de dominio resuelve a varias direcciones, todas se usarán en modo round-robin.
Además, una dirección puede especificarse como un grupo de servidores. El valor del parámetro puede contener variables.
En este caso, si la dirección se especifica como un nombre de dominio, primero se buscará entre los grupos de servidores descritos y, si no se encuentra, se resolverá mediante un resolver. El URI de la petición se pasa al servidor de la siguiente forma: Si la directiva Si En algunos casos, la parte del URI a reemplazar no puede determinarse: Cuando Cuando el URI se modifica dentro de un En este caso, el URI especificado en la directiva se ignora y se pasa el URI completo modificado. Cuando se usan variables en En este caso, si se especifica un URI en la directiva, se pasa tal cual, reemplazando el URI original. El proxying de WebSocket requiere una configuración especial. Permite pasar al cliente cabeceras de respuesta de un servidor proxy que de otro modo estarían deshabilitadas. Predeterminado http, server, location Indica si el cuerpo original de la petición se reenvía al servidor proxy. Véase también las directivas proxy_set_header y proxy_pass_request_headers. Predeterminado http, server, location Indica si las cabeceras de la petición original se reenvían al servidor proxy. Véase también las directivas proxy_set_header y proxy_pass_request_body. Predeterminado http, server, location Permite reenviar trailers desde el servidor proxy al cliente. Una sección de trailers en HTTP/1.1 se habilita explícitamente. Predeterminado http, server Define el valor del parámetro de transporte Activa el envío de datos en modo optimizado para QUIC usando
generic segmentation offload. Define un file con la clave secreta usada con QUIC para cifrar
Stateless Reset y
Address Validation. Por defecto, se genera una clave aleatoria en cada reinicio.
Los tokens generados con claves antiguas no son aceptados. Define un timeout para leer la respuesta del servidor proxy.
El tiempo se aplica únicamente entre dos operaciones de lectura consecutivas, no a la transmisión completa.
Si el servidor no transmite nada dentro de este tiempo, la conexión se cierra. Predeterminado http, server, location Define el texto que debe modificarse en las cabeceras "Location" y "Refresh" de una respuesta del servidor proxy. Por ejemplo, si el servidor devolvió: La directiva reescribirá esta cadena a: El nombre de servidor puede omitirse en la cadena de replacement: entonces se insertará el nombre del servidor principal y el puerto, si es distinto de 80. El reemplazo por defecto especificado por el parámetro Advertencia El parámetro La cadena replacement puede contener variables: También redirect puede contener variables: La directiva puede especificarse con expresiones regulares. En este caso, redirect debe comenzar con "~" para coincidencia sensible a mayúsculas o con "~*" para coincidencia insensible.
La expresión regular puede contener capturas con nombre y posicionales, y replacement puede referenciarlas: Se pueden definir varias directivas proxy_redirect en el mismo nivel: Si varias directivas pueden aplicarse a las cabeceras de respuesta de un servidor proxy, se elegirá la primera que coincida. El parámetro Con esta directiva también es posible añadir nombres de host a las redirecciones relativas emitidas por un servidor proxy: Predeterminado http, server, location Habilita o deshabilita el buffering del cuerpo de la petición del cliente. se lee el cuerpo completo de la petición del cliente antes de enviarla al servidor proxy. el cuerpo de la petición se envía inmediatamente al servidor proxy conforme se recibe. En este caso, la petición no puede ser reenviada al siguiente servidor si Angie ya empezó a enviar el cuerpo. Cuando se usa codificación de transferencia fragmentada (chunked transfer encoding) HTTP/1.1 para enviar el cuerpo de la petición original, este será almacenado en buffer independientemente del valor de la directiva, salvo que HTTP/1.1 esté habilitado para el proxying. Si se define un valor distinto de cero, Angie intentará minimizar el número de operaciones de envío en conexiones salientes a un servidor proxy usando la bandera NOTE_LOWAT del método kqueue, o la opción de socket SO_SNDLOWAT, con el tamaño especificado. Nota Esta directiva se ignora en Linux, Solaris y Windows. Define un timeout para la transmisión de una petición al servidor proxy.
El tiempo se aplica solo entre dos operaciones de escritura consecutivas, no a la transmisión completa.
Si el servidor proxy no recibe nada dentro de este tiempo, la conexión se cierra. Permite redefinir el cuerpo de la petición que se envía al servidor proxy.
El valor puede contener texto, variables y sus combinaciones. Predeterminado http, server, location Permite redefinir o añadir campos a la cabecera de la petición enviada al servidor proxy.
El value puede contener texto, variables y sus combinaciones.
Estas directivas se heredan del nivel de configuración anterior solo si no hay directivas proxy_set_header definidas en el nivel actual. Por defecto, solo dos campos se redefinen: Si el caching está habilitado, los campos de cabecera Un campo de cabecera "Host" sin cambios puede pasarse así: Sin embargo, si este campo no está presente en la cabecera de la petición del cliente, no se enviará nada.
En tal caso, es mejor usar la variable $host, cuyo valor corresponde al nombre de servidor en la cabecera "Host" o al nombre del servidor principal si no está presente: Además, el nombre del servidor puede pasarse junto con el puerto del servidor proxy: Si el valor de un campo de cabecera es una cadena vacía, dicho campo no se enviará al servidor proxy: Predeterminado http, server, location Configura el comportamiento de "TCP keepalive" en conexiones salientes a un servidor proxy. Por defecto, se aplican los parámetros del sistema operativo para el socket. Se activa la opción de socket SO_KEEPALIVE. Especifica un archivo con el certificado en formato PEM usado para la autenticación hacia un servidor HTTPS proxy.
Se pueden usar variables en el nombre de archivo. Added in version 1.2.0. Cuando proxy_ssl_ntls está habilitado, la directiva acepta dos argumentos en lugar de uno: Predeterminado http, server, location Define una caché que almacena certificados SSL y claves secretas especificados mediante variables. La directiva admite los siguientes parámetros: Ejemplo: Especifica un archivo con la clave secreta en formato PEM usada para autenticarse ante un servidor HTTPS proxy. Puede usarse el valor Se pueden usar variables en el nombre de archivo. Added in version 1.2.0. Cuando proxy_ssl_ntls está habilitado, la directiva acepta dos argumentos en lugar de uno: Predeterminado http, server, location Especifica los cifrados habilitados para peticiones a un servidor HTTPS proxy.
Los cifrados se especifican en el formato entendido por la librería OpenSSL. La lista de cifrados depende de la versión instalada de OpenSSL.
La lista completa puede verse usando el comando Advertencia La directiva En LibreSSL, los cifrados TLS 1.3 sí pueden configurarse con En BoringSSL, los cifrados TLS 1.3 no pueden configurarse en absoluto. Define comandos arbitrarios de configuración de OpenSSL (SSL_CONF_cmd) al establecer una conexión con el servidor HTTPS proxy. Nota La directiva es compatible con OpenSSL 1.0.2 o superior.
Para configurar cifrados TLS 1.3 en OpenSSL, use el comando Se pueden definir varias directivas proxy_ssl_conf_command en el mismo nivel. Estas se heredan del nivel de configuración anterior solo si no hay directivas proxy_ssl_conf_command en el nivel actual. Advertencia Configurar OpenSSL directamente puede provocar un comportamiento inesperado. Especifica un archivo con certificados revocados (CRL) en formato PEM usado para verificar el certificado del servidor HTTPS proxy. Permite sobrescribir el nombre de servidor usado para verificar el certificado del servidor HTTPS proxy y para ser pasado por SNI al establecer la conexión. Por defecto, se usa la parte de host de la URL en proxy_pass. Added in version 1.2.0. Habilita soporte del lado cliente para NTLS usando la librería TLS TongSuo. Nota Angie debe compilarse con el parámetro de configuración Especifica un archivo con contraseñas para claves secretas, donde cada contraseña se define en una línea independiente.
Las contraseñas se prueban en orden al cargar la clave. Predeterminado http, server, location Distinto en la versión 1.2.0: Se añadió el parámetro Habilita los protocolos especificados para peticiones hacia un servidor HTTPS proxy. Predeterminado http, server, location Habilita o deshabilita el envío del nombre de servidor configurado con proxy_ssl_name mediante la extensión TLS
Server Name Indication
(SNI, RFC 6066)
al establecer una conexión con el servidor HTTPS proxy. Predeterminado http, server, location Determina si se pueden reutilizar sesiones SSL al trabajar con el servidor proxy.
Si en los registros aparecen errores "SSL3_GET_FINISHED:digest check failed", intente desactivar la reutilización de sesiones. Especifica un archivo con certificados de CA de confianza en formato PEM usados para verificar el certificado del servidor HTTPS proxy. Habilita o deshabilita la verificación del certificado del servidor HTTPS proxy. Predeterminado http, server, location Define la profundidad de verificación en la cadena de certificados del servidor HTTPS proxy. Habilita el guardado de archivos en disco. guarda archivos según las rutas definidas en las directivas alias o root prohíbe el guardado de archivos El nombre del archivo puede definirse explícitamente usando una cadena con variables: La fecha de modificación se establece según la cabecera de respuesta Esta directiva puede usarse para crear copias locales de archivos estáticos inmutables, por ejemplo: o así: Predeterminado http, server, location Define permisos de acceso para los archivos y directorios recién creados, por ejemplo: Si se especifican permisos de acceso Predeterminado http, server, location Limita el tamaño de los datos escritos en un archivo temporal en una sola operación, cuando está habilitado el almacenamiento en archivos temporales de respuestas desde el servidor proxy.
Por defecto, el tamaño está limitado por dos búferes definidos en las directivas proxy_buffer_size y proxy_buffers.
El tamaño máximo del archivo temporal se define con la directiva proxy_max_temp_file_size. Predeterminado http, server, location Define un directorio para almacenar archivos temporales con datos recibidos de servidores proxy.
Puede usarse una jerarquía de subdirectorios de hasta tres niveles bajo el directorio especificado.
Por ejemplo, en la siguiente configuración: un archivo temporal podría tener el siguiente aspecto: Consulte también el parámetro El módulo http_proxy admite variables internas que pueden usarse para componer cabeceras con la directiva proxy_set_header: nombre y puerto del servidor proxy especificado en la directiva proxy_pass; puerto del servidor proxy especificado en la directiva proxy_pass, o el puerto por defecto del protocolo; el campo de cabecera de la petición de cliente Ejemplo de Configuración#
location / {
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_cache cache_zone;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
}
Directivas#
proxy_bind#
off
cancela el efecto de la directiva proxy_bind heredada de un nivel de configuración anterior, lo que permite al sistema asignar automáticamente la dirección IP y el puerto locales.transparent
permite que las conexiones salientes a un servidor proxy se originen desde una dirección IP no local, por ejemplo, desde la dirección IP real de un cliente:proxy_bind $remote_addr transparent;
transparent
, los procesos worker heredan la capacidad CAP_NET_RAW del proceso maestro.proxy_buffer_size#
proxy_buffering#
on
off
X-Accel-Buffering
. Esta capacidad puede deshabilitarse mediante la directiva proxy_ignore_headers.proxy_buffers#
proxy_buffers
number size;proxy_buffers 8 4k | 8k;
proxy_busy_buffers_size#
proxy_busy_buffers_size
size;proxy_busy_buffers_size 8k | 16k;
proxy_cache#
proxy_cache
zone | off
[path=
path];proxy_cache off;
off
keys_zone
para habilitar el cache sharding.
Al hacerlo, debe establecerse el parámetro path
de la directiva
proxy_cache que use este valor de keys_zone
:path=
pathContent-Type
:proxy_cache_path /cache/one keys_zone=zone:10m;
proxy_cache_path /cache/two keys_zone=zone;
map $upstream_http_content_type $cache {
~^text/ one;
default two;
}
server {
...
location / {
proxy_pass http://backend;
proxy_cache zone path=/cache/$cache;
proxy_cache_valid 200 10m;
}
}
Content-Type
empieza con text/
, se elegirá la primera ruta;
de lo contrario, la segunda.X-Accel-Expires
(máxima prioridad).Cache-Control
con los parámetros max-age
o s-maxage
.Expires
.proxy_cache_background_update#
proxy_cache_background_update
on
| off
;proxy_cache_background_update off;
proxy_cache_bypass#
proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
proxy_cache_bypass $http_pragma $http_authorization;
proxy_cache_convert_head#
proxy_cache_convert_head
on
| off
;proxy_cache_convert_head on;
proxy_cache_key#
proxy_cache_key
string;proxy_cache_key $scheme$proxy_host$request_uri;
proxy_cache_key "$host$request_uri $cookie_user";
proxy_cache_key $scheme$proxy_host$uri$is_args$args;
proxy_cache_lock#
proxy_cache_lock_age#
proxy_cache_lock_age
time;proxy_cache_lock_age 5s;
proxy_cache_lock_timeout#
proxy_cache_lock_timeout
time;proxy_cache_lock_timeout 5s;
proxy_cache_max_range_offset#
proxy_cache_methods#
proxy_cache_methods
GET
| HEAD
| POST
...;proxy_cache_methods GET HEAD;
proxy_cache_min_uses#
proxy_cache_min_uses
number;proxy_cache_min_uses 1;
proxy_cache_path#
proxy_cache_path
path [levels=
levels] [use_temp_path=
on
| off
] keys_zone=
name:size[:file=
file] [inactive=
time] [max_size=
size] [min_free=
size] [manager_files=
number] [manager_sleep=
time] [manager_threshold=
time] [loader_files=
number] [loader_sleep=
time] [loader_threshold=
time];levels
proxy_cache_path /data/angie/cache levels=1:2 keys_zone=one:10m;
/data/angie/cache/c/29/b7f54b2df7773722d382f4809d65029c
use_temp_path=on
| off
on
on
, se usará el directorio definido por la directiva proxy_temp_path para el location correspondiente.off
keys_zone
keys_zone
,
Angie guarda el contenido de esta zona en disco al salir el proceso maestro,
e intenta restaurarlo en la misma dirección de memoria al siguiente inicio
o tras una actualización binaria,
para lograr mayor persistencia y mejorar el tiempo de carga de la caché.failed to restore zone at address
)
y no usará el mecanismo de restauración de zona.
En su lugar, el archivo incompatible se renombrará a .old
;
puede eliminarlo o restaurar su nombre y revertir Angie a la configuración y versión donde se creó originalmente.inactive
inactive
es 10 minutos.keys_zone
.
El tamaño de la zona de memoria compartida solo puede especificarse en la primera directiva.
La selección entre directivas se basará en el parámetro path
de la directiva proxy_cache correspondiente.max_size
min_free
manager_files
100
.manager_threshold
200
milisegundos.manager_sleep
50
milisegundos.loader_files
,
asegura no superar loader_threshold
,
y hace una pausa breve definida por loader_sleep
antes de pasar al siguiente lote.
Las iteraciones continúan hasta que el cargador ha procesado todas las entradas de caché existentes en disco:loader_files
100
loader_threshold
200
milisegundosloader_sleep
50
milisegundoskeys_zone
no afecta al funcionamiento del cargador de caché.proxy_cache_revalidate#
proxy_cache_revalidate
on
| off
;proxy_cache_revalidate off;
If-Modified-Since
y If-None-Match
.proxy_cache_use_stale#
proxy_cache_use_stale
error
| timeout
| invalid_header
| updating
| http_500
| http_502
| http_503
| http_504
| http_403
| http_404
| http_429
| off
...;proxy_cache_use_stale off;
error
updating
Cache-Control
permite usar una respuesta caducada si se está actualizando.Cache-Control
permite usar una respuesta caducada en caso de error.proxy_cache_valid#
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_valid 5m;
any
para cachear cualquier respuesta:proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;
X-Accel-Expires
define el tiempo de caché de una respuesta en segundos. El valor cero desactiva la caché para esa respuesta. Si el valor comienza con el prefijo @
, define un tiempo absoluto en segundos desde Epoch hasta el cual la respuesta puede almacenarse en caché.X-Accel-Expires
, los parámetros de caché pueden establecerse en los campos de cabecera Expires
o Cache-Control
.Set-Cookie
, esa respuesta no se almacenará en caché.Vary
con el valor especial "*
", esa respuesta no se almacenará en caché. Si la cabecera incluye el campo Vary
con otro valor, esa respuesta se cacheará teniendo en cuenta los campos de cabecera de la solicitud correspondiente.proxy_connect_timeout#
proxy_connect_timeout
time;proxy_connect_timeout 60s;
proxy_connection_drop#
proxy_connection_drop
time | on
| off
;proxy_connection_drop off;
DELETE
.on
, las conexiones se cierran inmediatamente.proxy_force_ranges#
proxy_force_ranges
on
| off
;proxy_force_ranges off;
Accept-Ranges
en dichas respuestas.proxy_headers_hash_bucket_size#
proxy_headers_hash_bucket_size
size;proxy_headers_hash_bucket_size 64;
proxy_headers_hash_max_size#
proxy_headers_hash_max_size
size;proxy_headers_hash_max_size 512;
proxy_hide_header#
Date
, Server
, X-Pad
y X-Accel-...
de la respuesta del servidor proxy al cliente.
La directiva proxy_hide_header define campos adicionales que no se pasarán.
Si, por el contrario, se necesita permitir el paso de campos, puede usarse la directiva proxy_pass_header.proxy_http_version#
proxy_http_version
1.0
| 1.1
| 3
;proxy_http_version 1.0;
proxy_http3_hq#
hq-interop
,
usado para las pruebas de interoperabilidad de QUIC
en las que Angie participa.proxy_http3_max_concurrent_streams#
proxy_http3_max_concurrent_streams
number;proxy_http3_max_concurrent_streams 128;
proxy_http3_max_table_capacity#
proxy_http3_max_table_capacity
number;proxy_http3_max_table_capacity 4096;
proxy_http3_stream_buffer_size#
proxy_http3_stream_buffer_size
size;proxy_http3_stream_buffer_size 64k;
proxy_ignore_client_abort#
proxy_ignore_client_abort
on
| off
;proxy_ignore_client_abort off;
proxy_ignore_headers#
X-Accel-Redirect
, X-Accel-Expires
, X-Accel-Limit-Rate
, X-Accel-Buffering
, X-Accel-Charset
, Expires
, Cache-Control
, Set-Cookie
y Vary
.X-Accel-Expires
, Expires
, Cache-Control
, Set-Cookie
y Vary
establecen los parámetros del caché de respuesta;X-Accel-Redirect
realiza una redirección interna a la URI especificada;X-Accel-Limit-Rate
establece el límite de velocidad para la transmisión de una respuesta al cliente;X-Accel-Buffering
habilita o deshabilita el almacenamiento en búfer de una respuesta;X-Accel-Charset
define el charset deseado de una respuesta.proxy_intercept_errors#
proxy_intercept_errors
on
| off
;proxy_intercept_errors off;
proxy_limit_rate#
0
proxy_max_temp_file_size#
proxy_max_temp_file_size
size;proxy_max_temp_file_size 1024m;
0
proxy_method#
proxy_next_upstream#
proxy_next_upstream
error
| timeout
| invalid_header
| http_500
| http_502
| http_503
| http_504
| http_403
| http_404
| http_429
| non_idempotent
| off
...;proxy_next_upstream error timeout;
error
timeout
invalid_header
http_500
http_502
http_503
http_504
http_403
http_404
http_429
non_idempotent
POST
, LOCK
, PATCH
) no se reenvían a otro servidor si ya fueron enviadas a un upstream. Activar esta opción permite reintentar dichas solicitudes.off
error
timeout
invalid_header
http_500
http_502
http_503
http_504
http_429
http_403
http_404
proxy_next_upstream_timeout#
proxy_next_upstream_timeout
time;proxy_next_upstream_timeout 0;
0
proxy_next_upstream_tries#
proxy_next_upstream_tries
number;proxy_next_upstream_tries 0;
0
proxy_no_cache#
proxy_no_cache $cookie_nocache $arg_nocache$arg_comment;
proxy_no_cache $http_pragma $http_authorization;
proxy_pass#
http
o https
.
La dirección puede ser un nombre de dominio o una dirección IP, con un puerto opcional:proxy_pass http://localhost:8000/uri/;
unix
y encerrada entre dos puntos:proxy_pass http://unix:/tmp/backend.socket:/uri/;
proxy_pass
se especifica con un URI, entonces cuando la petición se reenvía al servidor, la parte del URI de la petición normalizado que coincide con la ubicación se reemplaza por el URI especificado en la directiva:location /name/ {
proxy_pass http://127.0.0.1/remote/;
}
proxy_pass
se especifica sin un URI, el URI de la petición se pasa al servidor en la misma forma en que fue enviado por el cliente cuando se procesó la petición original, o el URI completo y normalizado si se procesó un URI reescrito:location /some/path/ {
proxy_pass http://127.0.0.1;
}
location
se especifica usando una expresión regular o dentro de un location
con nombre.
En estos casos, proxy_pass
debe especificarse sin URI.location
con proxy usando la directiva rewrite y esa misma configuración se usa para procesar la petición (break):location /name/ {
rewrite /name/([^/]+) /users?name=$1 break;
proxy_pass http://127.0.0.1;
}
proxy_pass
:location /name/ {
proxy_pass http://127.0.0.1$request_uri;
}
proxy_pass_header#
proxy_pass_request_body#
proxy_pass_request_body
on
| off
;proxy_pass_request_body on;
location /x-accel-redirect-here/ {
proxy_method GET;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_pass ...;
}
proxy_pass_request_headers#
proxy_pass_request_headers
on
| off
;proxy_pass_request_headers on;
location /x-accel-redirect-here/ {
proxy_method GET;
proxy_pass_request_headers off;
proxy_pass_request_body off;
proxy_pass ...;
}
proxy_pass_trailers#
proxy_pass_trailers
on
| off
;proxy_pass_trailers off;
location / {
proxy_http_version 1.1;
proxy_set_header Connection "te";
proxy_set_header TE "trailers";
proxy_pass_trailers on;
proxy_pass ...;
}
proxy_quic_active_connection_id_limit#
proxy_quic_active_connection_id_limit
number;proxy_quic_active_connection_id_limit 2;
active_connection_id_limit
para QUIC.
Este es el número máximo de IDs de conexión activos que pueden mantenerse por servidor.proxy_quic_gso#
proxy_quic_host_key#
proxy_read_timeout#
proxy_redirect#
proxy_redirect
default
;
proxy_redirect
off
;
proxy_redirect
redirect replacement;proxy_redirect default;
Location: http://localhost:8000/two/some/uri/
proxy_redirect http://localhost:8000/two/ http://frontend/one/;
Location: http://frontend/one/some/uri/
proxy_redirect http://localhost:8000/two/ /;
default
usa los parámetros de las directivas location y proxy_pass.
Por lo tanto, las siguientes configuraciones son equivalentes:location /one/ {
proxy_pass http://upstream:port/two/;
proxy_redirect default;
}
location /one/ {
proxy_pass http://upstream:port/two/;
proxy_redirect http://upstream:port/two/ /one/;
}
default
no está permitido si proxy_pass se especifica usando variables.proxy_redirect http://localhost:8000/ http://$host:$server_port/;
proxy_redirect http://$proxy_host:8000/ /;
proxy_redirect ~^(http://[^:]+):\d+(/.+)$ $1$2;
proxy_redirect ~*/user/([^/]+)/(.+)$ http://$1.example.com/$2;
proxy_redirect default;
proxy_redirect http://localhost:8000/ /;
proxy_redirect http://www.example.com/ /;
off
cancela el efecto de las directivas proxy_redirect heredadas de un nivel de configuración anterior.proxy_redirect / /;
proxy_request_buffering#
proxy_request_buffering
on
| off
;proxy_request_buffering on;
on
off
proxy_send_lowat#
proxy_send_timeout#
proxy_set_body#
proxy_set_header#
proxy_set_header
field value;proxy_set_header Host $proxy_host;
proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
If-Modified-Since
, If-Unmodified-Since
, If-None-Match
, If-Match
, Range
y If-Range
de la petición original no se envían al servidor proxy.proxy_set_header Host $http_host;
proxy_set_header Host $host;
proxy_set_header Host $host:$proxy_port;
proxy_set_header Accept-Encoding "";
proxy_socket_keepalive#
proxy_socket_keepalive
on
| off
;proxy_socket_keepalive off;
off
on
proxy_ssl_certificate#
location /proxy {
proxy_ssl_ntls on;
proxy_ssl_certificate sign.crt enc.crt;
proxy_ssl_certificate_key sign.key enc.key;
proxy_ssl_ciphers "ECC-SM2-WITH-SM4-SM3:ECDHE-SM2-WITH-SM4-SM3:RSA";
proxy_pass https://backend:443;
}
proxy_ssl_certificate_cache#
proxy_ssl_certificate_cache
off
;
proxy_ssl_certificate_cache
max=
N [inactive=
time] [valid=
time];proxy_ssl_certificate_cache off;
max
— número máximo de elementos en la caché. Cuando se sobrepasa, se eliminan los menos usados (LRU).inactive
— tiempo tras el cual un elemento se elimina si no ha sido accedido. Valor por defecto: 10 segundos.valid
— tiempo durante el cual un elemento en caché se considera válido y reutilizable. Valor por defecto: 60 segundos.
Tras este periodo, los certificados se recargan o revalidan.off
— desactiva la caché.proxy_ssl_certificate $proxy_ssl_server_name.crt;
proxy_ssl_certificate_key $proxy_ssl_server_name.key;
proxy_ssl_certificate_cache max=1000 inactive=20s valid=1m;
proxy_ssl_certificate_key#
engine:`name`:id
en lugar de un archivo, lo cual carga una clave secreta con el id especificado desde el motor OpenSSL indicado.location /proxy {
proxy_ssl_ntls on;
proxy_ssl_certificate sign.crt enc.crt;
proxy_ssl_certificate_key sign.key enc.key;
proxy_ssl_ciphers "ECC-SM2-WITH-SM4-SM3:ECDHE-SM2-WITH-SM4-SM3:RSA";
proxy_pass https://backend:443;
}
proxy_ssl_ciphers#
proxy_ssl_ciphers
ciphers;proxy_ssl_ciphers DEFAULT;
openssl ciphers
.proxy_ssl_ciphers
no configura cifrados para TLS 1.3 cuando se usa OpenSSL.
Para ajustar los cifrados TLS 1.3 con OpenSSL, use la directiva proxy_ssl_conf_command, añadida para soportar configuración avanzada de SSL.proxy_ssl_ciphers
.proxy_ssl_conf_command#
ciphersuites
.proxy_ssl_crl#
proxy_ssl_name#
proxy_ssl_ntls#
location /proxy {
proxy_ssl_ntls on;
proxy_ssl_certificate sign.crt enc.crt;
proxy_ssl_certificate_key sign.key enc.key;
proxy_ssl_ciphers "ECC-SM2-WITH-SM4-SM3:ECDHE-SM2-WITH-SM4-SM3:RSA";
proxy_pass https://backend:443;
}
--with-ntls
y la librería SSL correspondiente con soporte NTLS:./configure --with-openssl=../Tongsuo-8.3.0 \
--with-openssl-opt=enable-ntls \
--with-ntls
proxy_ssl_password_file#
proxy_ssl_protocols#
proxy_ssl_protocols
[SSLv2
] [SSLv3
] [TLSv1
] [TLSv1.1
] [TLSv1.2
] [TLSv1.3
];proxy_ssl_protocols TLSv1.2 TLSv1.3;
TLSv1.3
al conjunto por defecto.proxy_ssl_server_name#
proxy_ssl_server_name
on
| off
;proxy_ssl_server_name off;
proxy_ssl_session_reuse#
proxy_ssl_session_reuse
on
| off
;proxy_ssl_session_reuse on;
proxy_ssl_trusted_certificate#
proxy_ssl_verify#
proxy_ssl_verify_depth#
proxy_ssl_verify_depth
number;proxy_ssl_verify_depth 1;
proxy_store#
on
off
proxy_store /data/www$original_uri;
Last-Modified
.
La respuesta se escribe primero en un archivo temporal y luego se renombra.
Archivos temporales y almacenamiento persistente pueden ubicarse en diferentes sistemas de ficheros, pero en ese caso el archivo se copiará entre sistemas, en lugar de una operación barata de renombrado.
Por ello, se recomienda que en un mismo location tanto los archivos guardados como el directorio de temporales (definido con proxy_temp_path) estén en el mismo sistema de ficheros.location /images/ {
root /data/www;
error_page 404 = /fetch$uri;
}
location /fetch/ {
internal;
proxy_pass http://backend/;
proxy_store on;
proxy_store_access user:rw group:rw all:r;
proxy_temp_path /data/temp;
alias /data/www/;
}
location /images/ {
root /data/www;
error_page 404 = @fetch;
}
location @fetch {
internal;
proxy_pass http://backend;
proxy_store on;
proxy_store_access user:rw group:rw all:r;
proxy_temp_path /data/temp;
root /data/www;
}
proxy_store_access#
proxy_store_access
users:permissions ...;proxy_store_access user:rw;
proxy_store_access user:rw group:rw all:r;
group
o all
, los permisos de usuario pueden omitirse:proxy_store_access group:rw all:r;
proxy_temp_file_write_size#
proxy_temp_file_write_size
size;proxy_temp_file_write_size 8k|16k;
proxy_temp_path#
proxy_temp_path
path [level1 [level2 [level3]]]`;proxy_temp_path proxy_temp;
(la ruta depende de la opción de compilación --http-proxy-temp-path
)proxy_temp_path /spool/angie/proxy_temp 1 2;
/spool/angie/proxy_temp/7/45/00000123457
use_temp_path
de la directiva proxy_cache_path.Variables Integradas#
$proxy_host
#$proxy_port
#$proxy_add_x_forwarded_for
#X-Forwarded-For
con la variable $remote_addr añadida, separada por una coma.
Si el campo X-Forwarded-For
no está presente en la cabecera de la petición, la variable $proxy_add_x_forwarded_for es igual a la variable $remote_addr.