Foi lançado o ramo principal do nginx 1.25.3, no qual continua o desenvolvimento de novas funcionalidades. No ramo estável suportado paralelamente 1.24.x, são feitas apenas alterações relacionadas à correção de erros graves e vulnerabilidades. No futuro, será formada uma nova versão estável 1.26 com base no ramo principal 1.25.x. O código do projeto é escrito em C e distribuído sob a licença BSD.
Entre as alterações:
- Foi reforçada a proteção contra atividades anômalas de clientes HTTP/2, em particular contra ataques DoS da classe 'Rapid Reset', que criam um grande número de fluxos cancelados de uma só vez em uma conexão HTTP/2. Na configuração padrão, esses ataques esbarram no limite de requisições na conexão 'keepalive_requests' (após cada 1000 requisições, a conexão será cancelada) e nas restrições 'limit_req'. Para uma reação mais rápida a picos de requisições em muitos fluxos, uma limitação adicional foi adicionada, impedindo a criação de mais de 256 (2 * max_concurrent_streams) novos fluxos por ciclo de evento por padrão. Esse novo limite permite começar a bloquear requisições antes de alcançar o limite geral de fluxos simultâneos, por exemplo, quando os fluxos são tratados de forma assíncrona ou cancelados. Uma alteração semelhante também foi incorporada na versão angie 1.3.1 (fork do nginx), publicada há uma semana.
- Foi melhorado o gerenciamento de buffers utilizados na detecção automática de conexões HTTP/2.
- Melhorou o desempenho ao iniciar configurações com um grande número de diretivas «location».
- Foi corrigido o encerramento abrupto do processo de trabalho observado ao tentar usar HTTP/2 sem SSL.
- Foi corrigido o manuseio inadequado do cabeçalho 'Status' retornado pelo backend com um texto explicativo vazio.
- Foi eliminada uma vazamento de memória durante a reconfiguração, que ocorria ao compilar com a biblioteca PCRE2.
- Uma grande quantidade de correções e melhorias relacionadas ao suporte ao protocolo HTTP/3 foi adicionada.
Ao mesmo tempo, foi lançada a versão njs 0.8.2, um interpretador da linguagem JavaScript para servidor web nginx. O interpretador njs implementa os padrões ECMAScript e permite expandir as capacidades do nginx para manipulação de requisições através de scripts na configuração. Os scripts podem ser utilizados no arquivo de configuração para definir lógica avançada de manipulação de requisições, formação de configuração, geração dinâmica de resposta, modificação de requisição/resposta ou criação rápida de gambiarras para solucionar problemas em aplicações web. Na nova versão, foi adicionado o objeto console, que fornece os métodos error(), info(), log(), time(), timeEnd() e warn(). No módulo fs, foi adicionado o método fs.existsSync().
Também é importante mencionar a publicação do servidor de aplicações NGINX Unit 1.31.1, que oferece uma solução para executar aplicações web em várias linguagens de programação (Python, PHP, Perl, Ruby, Go, JavaScript/Node.js e Java). Sob o gerenciamento do NGINX Unit, pode haver a execução simultânea de várias aplicações em diferentes linguagens, cujas opções de execução podem ser alteradas dinamicamente sem a necessidade de editar arquivos de configuração e reiniciar. Além da correção de erros, na nova versão do módulo Wasm foi permitida a carga de dados com mais de 4 GB, e ao responder, foi disponibilizada a possibilidade de definir códigos de estado HTTP.
Fonte: opennet.ru
