Después de 13 meses de desarrollo, se presenta una nueva rama estable del servidor HTTP de alto rendimiento y proxy multiprotocolo nginx 1.22.0, que incorpora los cambios acumulados en la rama principal 1.21.x. En el futuro, todos los cambios en la rama estable 1.22 estarán relacionados con la corrección de errores graves y vulnerabilidades. Pronto se formará la rama principal nginx 1.23, en la que se continuará el desarrollo de nuevas funcionalidades. Se recomienda a los usuarios comunes, que no tienen la tarea de asegurar compatibilidad con módulos de terceros, utilizar la rama principal, sobre la que se generan lanzamientos del producto comercial Nginx Plus cada tres meses.
Según el informe de abril de la empresa Netcraft, nginx se utiliza en el 20.08% de todos los sitios activos (hace un año era el 20.15%, hace dos años el 19.56%), lo que corresponde al segundo lugar en popularidad en esta categoría (la cuota de Apache es del 22.58% (hace un año 25.38%), Cloudflare — 10.42% (8.51%), Google — 8.89% (10.09%). Al considerar todos los sitios, nginx mantiene el liderazgo y ocupa el 31.13% del mercado (hace un año 35.34%, hace dos años — 36.91%), mientras que la cuota de Apache es del 23.08% (25.98%), OpenResty (plataforma basada en nginx y LuaJIT) — 8.01% (6.55%), Cloudflare — 5.49%, Microsoft IIS — 4% (5.96%).
Entre los millones de sitios más visitados del mundo, la cuota de nginx es del 21.79% (hace un año 23.06%, hace dos años 25.54%). Actualmente, alrededor de 361 millones de sitios están bajo la gestión de nginx (hace un año 419 millones). Según W3Techs, nginx se utiliza en el 33.5% de los sitios de entre los millones más visitados; en mayo del año pasado, esta cifra era del 33.8%, y hace dos años — del 31.9%. La cuota de Apache disminuyó en un año del 33.8% al 31.5%, y la de Microsoft IIS del 7% al 6%. La cuota de LiteSpeed creció del 8.5% al 12.1%, y la de Node.js del 1.2% al 1.9%. En Rusia, nginx se utiliza en el 79.8% de los sitios más visitados (hace un año — 79.1%).
Mejoras más destacadas añadidas durante la formación de la rama principal 1.21.x:
- Se agregó soporte para variables en las directivas ‘proxy_ssl_certificate’, ‘proxy_ssl_certificate_key’, ‘grpc_ssl_certificate’, ‘grpc_ssl_certificate_key’, ‘uwsgi_ssl_certificate’ y ‘uwsgi_ssl_certificate_key’.
- Se ha añadido soporte para el modo 'pipelining' en el módulo proxy de correo para enviar múltiples solicitudes POP3 o IMAP en una sola conexión, así como una nueva directiva 'max_errors' que define el número máximo de errores de protocolo después del cual se cerrará la conexión.
- Se ha implementado el envío de los encabezados 'Auth-SSL-Protocol' y 'Auth-SSL-Cipher' servidor de autenticación del proxy de correo.
- El módulo stream ha añadido soporte para la extensión ALPN de TLS. Se ha propuesto la directiva ssl_alpn para definir la lista de protocolos soportados por ALPN (h2, http/1.1), y para obtener información sobre el protocolo ALPN acordado con el cliente se usa la variable $ssl_alpn_protocol.
- Se agregó el parámetro ‘fastopen’ al módulo stream, que habilita el modo ‘TCP Fast Open’ para los sockets escuchando.
- Se ha establecido el escape de caracteres «»», «», «\», «^», «`», «{«, «|» y «}» al hacer proxy con modificación de URI.
- El módulo stream ha añadido la directiva proxy_half_close, que permite configurar el comportamiento al cerrar la conexión proxy TCP en uno de los lados («cierre medio de TCP»).
- El módulo ngx_http_mp4_module ha añadido una nueva directiva mp4_start_key_frame para la transmisión de un flujo de video que comienza desde el fotograma clave.
- Se ha añadido la variable $ssl_curve, que devuelve el tipo de curva elíptica seleccionada para el acuerdo de claves en la sesión TLS.
- En la directiva «sendfile_max_chunk», el valor por defecto se ha cambiado a 2 megabytes;
- Se ha garantizado la compatibilidad con la biblioteca OpenSSL 3.0. Se ha añadido soporte para la llamada SSL_sendfile() al utilizar OpenSSL 3.0.
- Se ha habilitado por defecto la compilación con la biblioteca PCRE2, que proporciona funciones para el procesamiento de expresiones regulares.
- Al cargar certificados servidores se ha establecido el uso de niveles de seguridad soportados a partir de OpenSSL 1.1.0, definidos a través del parámetro «@SECLEVEL=N» en la directiva ssl_ciphers.
- Se ha descontinuado el soporte para el conjunto de cifrado exportado.
- En la API de filtrado del cuerpo de la solicitud se ha permitido la búsqueda en búfer de los datos procesados.
- En la plataforma FreeBSD se ha mejorado el soporte para la llamada del sistema sendfile, diseñada para facilitar la transferencia directa de datos entre un descriptor de archivo y un socket. El modo sendfile(SF_NODISKIO) está siempre habilitado y se ha añadido soporte para el modo sendfile(SF_NOCACHE).
- Se ha descontinuado el soporte para establecer conexiones HTTP/2 utilizando la extensión NPN (Negociación de Protocolo Siguiente) en lugar de ALPN.
- Se ha bloqueado las solicitudes HTTP/1.0 que incluyen el encabezado HTTP «Transfer-Encoding» (introducido en la versión del protocolo HTTP/1.1).
- Se ha mejorado la protección contra ataques de tipo "HTTP Request Smuggling" en los sistemas de frontend-backend, lo que permite la inyección en el contenido de las solicitudes de otros usuarios, procesadas en el mismo hilo entre el frontend y el backend. Nginx ahora siempre devuelve un error al usar el método CONNECT; al especificar simultáneamente los encabezados "Content-Length" y "Transfer-Encoding"; si hay espacios o caracteres de control en la cadena de consulta, el nombre del encabezado HTTP o el valor del encabezado "Host".
Fuente: opennet.ru
