Después de un año de desarrollo, se ha publicado una nueva rama estable del servidor HTTP de alto rendimiento y proxy multiprotocolo nginx 1.26.0, que incorpora los cambios acumulados en la rama principal 1.25.x. En adelante, todos los cambios en la rama estable 1.26 se centrarán en solucionar errores serios y vulnerabilidades. Pronto se formará la rama principal nginx 1.27, donde se continuará desarrollando nuevas funcionalidades. Para los usuarios comunes, que no tienen la necesidad de asegurar compatibilidad con módulos de terceros, se recomienda utilizar la rama principal, de la cual se generan lanzamientos del producto comercial Nginx Plus cada tres meses.
Según el informe de marzo de la compañía Netcraft, aproximadamente 243 millones de sitios están gestionados por nginx (hace un año eran 289 millones). Nginx se utiliza en el 18.15% de todos los sitios activos (hace un año era 18.94%, hace dos años 20.08%), lo que lo coloca en segundo lugar en popularidad en esta categoría (la participación de Apache es del 20.09% (hace un año 20.52, hace dos años 22.58%), Cloudflare — 14.12% (11.32%, 10.42%), Google — 10.41% (9.89%, 8.89%). Al considerar todos los sitios, nginx mantiene el liderazgo con un 22.31% de participación en el mercado (hace un año 25.94%, hace dos años — 31.13%), mientras que la participación de Apache es del 20.17% (20.58, 23.08%), Cloudflare — 11.24% (10.17, 5.49%), OpenResty (plataforma basada en nginx y LuaJIT) — 7.93% (7.94%, 8.01%).
Entre los millones de sitios web más visitados en el mundo, la cuota de nginx es del 20.63% (hace un año era del 21.37%, hace dos años del 21.79%), Cloudflare alcanza el 22.59% (hace un año era del 21.62%), y Apache httpd tiene el 20.09% (21.18%). Según W3Techs, nginx se utiliza en el 34.3% de los sitios entre los millones más visitados; en abril del año pasado, este indicador era del 34.5%, y hace dos años del 33.1%. La cuota de Apache disminuyó en un año del 32.2% al 30.1%, mientras que la cuota de Microsoft IIS bajó del 5.6% al 4.8%. La cuota de Node.js aumentó del 2.4% al 3.2%, y la de LiteSpeed del 11.8% al 12.9%.
Mejoras más notables añadidas en el proceso de formación de la rama principal 1.25.x:
- Se ha añadido el módulo ngx_http_v3 con soporte experimental para el protocolo HTTP/3. Para compilar el módulo se proporciona la opción «—with-http_v3_module». HTTP/3 define el uso del protocolo QUIC (Quick UDP Internet Connections) como transporte para HTTP/2. QUIC es una capa sobre el protocolo UDP que admite la multiplexión de múltiples conexiones y proporciona métodos de cifrado equivalentes a TLS/SSL. Este protocolo fue creado en 2013 por Google como alternativa a la combinación TCP+TLS para la web, abordando problemas de latencia en la conexión y eliminando retrasos por pérdida de paquetes durante la transmisión de datos.
- Se ha agregado una directiva separada «http2» para habilitar selectivamente el protocolo HTTP/2 vinculado a los servidores (puede utilizarse en bloques «server» separados). El parámetro «http2» en la directiva «listen» ha sido declarado obsoleto.
- Se ha mejorado la protección contra actividades anómalas de clientes HTTP/2, en particular, contra ataques DoS de tipo «Rapid Reset», en los que se generan un gran número de flujos que se restablecen de inmediato dentro de una única conexión HTTP/2. En la configuración predeterminada, tales ataques chocan con el límite en el número de solicitudes por conexión «keepalive_requests» (después de cada 1000 solicitudes, la conexión se restablece) y con las restricciones de «limit_req». Para una respuesta más rápida ante inundaciones de solicitudes a través de muchos flujos, se ha añadido una restricción adicional que no permite crear, por defecto, más de 256 (2 * max_concurrent_streams) nuevos flujos en cada ciclo de procesamiento de eventos. Esta nueva restricción permite comenzar a bloquear solicitudes antes de alcanzar el límite general de flujos simultáneos, por ejemplo, cuando los flujos se procesan de forma asíncrona o se restablecen.
- Se ha añadido soporte en el módulo stream servidores virtuales, cuya configuración se define en el bloque «server { … }» mediante la directiva server_name. server { server_name ~^(www\.)?(.+)$; proxy_pass www.$2:12345; }
- Se ha añadido un nuevo módulo ngx_stream_pass_module, destinado a pasar las conexiones recibidas directamente a cualquier socket de escucha asociado con módulos como http, stream y mail. stream { server { listen 12345 ssl; ssl_certificate domain.crt; ssl_certificate_key domain.key; pass 127.0.0.1:8000; } }
- La directiva listen en el módulo stream ha implementado soporte para los parámetros «deferred» (que incluye accept diferido), «accept_filter» (filtro de conexiones entrantes que se aplica antes de llamar a la función accept) y «setfib» (asignación de la tabla de enrutamiento).
- Para algunas arquitecturas, se ha implementado soporte para la definición del tamaño del bloque (cache line) utilizado para la transferencia de datos entre la caché de la CPU y la memoria.
- Se ha mejorado la gestión de los buffers utilizados para la detección automática de conexiones HTTP/2.
- Se ha incrementado el rendimiento al iniciar configuraciones con un gran número de directivas 'location'.
- Se eliminó el soporte para la tecnología Server push en HTTP/2.
- Se ha discontinuado el soporte para la directiva «ssl», anteriormente declarada obsoleta.
La versión estable del proyecto FreeNginx 1.26.0, un fork de Nginx, fue publicada hace dos semanas. El desarrollo del fork está a cargo de Maxim Dunin, uno de los desarrolladores clave de Nginx. FreeNginx se posiciona como un proyecto no comercial que asegura el desarrollo de la base de código de Nginx sin intervención corporativa.
Fuente: opennet.ru
