Se ha lanzado la versión principal de nginx 1.19.7, en la que continúa el desarrollo de nuevas funcionalidades (en la rama estable mantenida de forma paralela, 1.18, solo se realizan cambios relacionados con la corrección de errores graves y vulnerabilidades).
Principales cambios:
- Al agotar las conexiones libres del proceso de trabajo, nginx ahora cierra no solo las conexiones keepalive, sino también las conexiones en estado de espera para cerrar el socket («lingering close«).
- El código de manejo de conexiones en HTTP/2 se ha acercado a la implementación de HTTP/1.x. Se ha eliminado el soporte para configuraciones individuales como «http2_recv_timeout», «http2_idle_timeout» y «http2_max_requests» a favor de las directivas generales «keepalive_timeout» y «keepalive_requests».
- Se han eliminado las configuraciones «http2_max_field_size» y «http2_max_header_size», y en su lugar se debe utilizar «large_client_header_buffers».
Simultáneamente se lanzó njs 0.5.1, un intérprete del lenguaje JavaScript para de un servidor web nginx. El intérprete njs implementa estándares ECMAScript y permite ampliar las capacidades de nginx para manejar solicitudes mediante scripts en la configuración. Los scripts pueden utilizarse en el archivo de configuración para definir lógica de procesamiento de solicitudes avanzada, generación de configuraciones, generación dinámica de respuestas, modificación de solicitudes/respuestas o rápida creación de simulaciones para resolver problemas en aplicaciones web.
La nueva versión incluye la directiva «js_header_filter», que permite especificar una función JavaScript para filtrar y modificar encabezados de respuesta arbitrarios: js_import foo.js; location / { js_header_filter foo.filter; proxy_pass http://127.0.0.1:8081/; } foo.js: function filter(r) { var cookies = r.headersOut['Set-Cookie']; var len = r.args.len ? Number(r.args.len) : 0; r.headersOut['Set-Cookie'] = cookies.filter(v => v.length > len); } export default {filter};
También se ha añadido el método ngx.fetch(), que implementa la API Fetch y proporciona funcionalidad de cliente HTTP. El método admite el manejo de opciones como body, headers, buffer_size y max_response_body_size. En el objeto Response se admiten los métodos arrayBuffer(), bodyUsed, json(), headers, ok, redirect, status, statusText, text(), type y url, mientras que en el objeto Header se encuentran los métodos get(), getAll() y has(). function fetch(r) { ngx.fetch('http://nginx.org/') .then(reply => reply.text()) .then(body => r.return(200, body)) .catch(e => r.return(501, e.message)); }
También se puede destacar la publicación servidores de las aplicaciones NGINX Unit 1.22, que ofrece una solución para ejecutar aplicaciones web en varios lenguajes de programación (Python, PHP, Perl, Ruby, Go, JavaScript/Node.js y Java). Bajo la gestión de NGINX Unit, múltiples aplicaciones en diferentes lenguajes de programación pueden ejecutarse simultáneamente, cuyos parámetros de ejecución se pueden modificar dinámicamente sin necesidad de editar archivos de configuración y reiniciar. El código está escrito en C y se distribuye bajo la licencia Apache 2.0.
En la nueva versión de NGINX Unit, se ha puesto un énfasis especial en mejorar la estabilidad, ampliar las herramientas de prueba y corregir errores. En los paquetes generados para Linux, se han modificado el usuario y el grupo bajo los cuales se ejecuta NGINX Unit. En lugar de nobody:nobody, los procesos ahora se ejecutan bajo un usuario separado unit en el grupo unit. Se ha garantizado la compatibilidad con la API Stream de los objetos ServerRequest y ServerResponse del módulo Node.js. En la opción "path" para aplicaciones Python, se permite especificar varios directorios.
Fuente: opennet.ru
