Foi lançado o branch principal do nginx 1.19.7, dentro do qual continua o desenvolvimento de novos recursos (no branch estável 1.18 com suporte paralelo, apenas são feitas alterações relacionadas à eliminação de erros graves e vulnerabilidades).
Grandes mudanças:
- Quando um processo de trabalho fica sem conexões livres, o nginx agora fecha não apenas as conexões keepalive, mas também as conexões que aguardam o fechamento do soquete (“fechamento prolongado”).
- O código de processamento de conexão em HTTP/2 é próximo da implementação HTTP/1.x. O suporte para as configurações individuais "http2_recv_timeout", "http2_idle_timeout" e "http2_max_requests" foi descontinuado em favor das diretivas gerais "keepalive_timeout" e "keepalive_requests".
- As configurações "http2_max_field_size" e "http2_max_header_size" foram removidas e "large_client_header_buffers" deve ser usado em seu lugar.
Ao mesmo tempo, foi lançado o njs 0.5.1, um interpretador JavaScript para o servidor web nginx. O interpretador njs implementa padrões ECMAScript e permite expandir a capacidade do nginx de processar solicitações usando scripts na configuração. Os scripts podem ser usados em um arquivo de configuração para definir lógica avançada para processar solicitações, gerar uma configuração, gerar dinamicamente uma resposta, modificar uma solicitação/resposta ou criar stubs rapidamente para resolver problemas em aplicações web.
A nova versão adiciona a diretiva “js_header_filter”, que permite definir uma função JavaScript para filtrar e alterar cabeçalhos de resposta arbitrários: js_import foo.js; localização / { 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? Número(r.args.len): 0; r.headersOut['Set-Cookie'] = cookies.filter(v=>v.length > len); } exportar padrão {filtro};
Também foi adicionado o método ngx.fetch(), que implementa a API Fetch, que fornece funcionalidade de cliente HTTP. O método suporta o processamento de opções de corpo, cabeçalhos, buffer_size e max_response_body_size. O objeto Response retornado suporta métodos arrayBuffer(), bodyUsed, json(), headers, ok, redirect, status, statusText, text(), type e url, e o objeto Header suporta get(), getAll() e has() métodos . function fetch(r) { ngx.fetch('http://nginx.org/') .then(reply => respond.text()) .then(body => r.return(200, body)) .catch (e => r.return(501, e.mensagem)); }
De referir ainda a publicação do servidor de aplicações NGINX Unit 1.22, que oferece uma solução para execução de aplicações web em diversas linguagens de programação (Python, PHP, Perl, Ruby, Go, JavaScript/Node.js e Java). A unidade NGINX pode executar simultaneamente vários aplicativos em diferentes linguagens de programação, cujos parâmetros de inicialização podem ser alterados dinamicamente sem a necessidade de editar arquivos de configuração e reiniciar. O código é escrito em C e distribuído sob a licença Apache 2.0.
A nova versão da unidade NGINX focou em melhorar a estabilidade, expandir as ferramentas de teste e corrigir bugs. Nos pacotes gerados para Linux, o usuário e o grupo sob o qual a Unidade NGINX é executada foram alterados. Em vez de ninguém: ninguém, os processos agora são executados na unidade de usuário individual no grupo de unidades. Compatibilidade garantida com a API Stream dos objetos ServerRequest e ServerResponse do módulo Node.js. A opção "path" para aplicativos Python permite que vários diretórios sejam especificados.
Fonte: opennet.ru