Foi lançado o versionamento principal do nginx 1.19.7, no qual continuam o desenvolvimento de novas funcionalidades (na versão estável suportada paralelamente 1.18, apenas são feitas alterações relacionadas à correção de erros graves e vulnerabilidades).
Principais mudanças:
- Quando o processo atinge o limite de conexões livres, o nginx agora fecha não apenas as conexões keepalive, mas também as conexões em estado de encerramento do socket (‘lingering close’).
- O código de manipulação de conexões no HTTP/2 foi aproximado da implementação do HTTP/1.x. O suporte a configurações específicas ‘http2_recv_timeout’, ‘http2_idle_timeout’ e ‘http2_max_requests’ foi descontinuado em favor das diretrizes gerais ‘keepalive_timeout’ e ‘keepalive_requests’.
- As configurações ‘http2_max_field_size’ e ‘http2_max_header_size’ foram removidas, sendo recomendável usar ‘large_client_header_buffers’.
Ao mesmo tempo, foi lançado o njs 0.5.1, um interpretador da linguagem JavaScript para servidor web nginx. O interpretador njs implementa os padrões ECMAScript e permite expandir as capacidades do nginx no processamento de requisições com scripts na configuração. Os scripts podem ser utilizados no arquivo de configuração para definir lógicas avançadas de processamento de requisições, gerar configurações, gerar respostas dinamicamente, modificar requisições/respostas ou criar facilmente gambiarras para resolver problemas em aplicativos web.
Na nova versão, foi adicionada a diretiva ‘js_header_filter’, que permite definir uma função JavaScript para filtrar e modificar cabeçalhos de resposta arbitrários: 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};
Também foi adicionado o método ngx.fetch(), que implementa a API Fetch, oferecendo funcionalidades de cliente HTTP. O método suporta o processamento de opções body, headers, buffer_size e max_response_body_size. No objeto Response retornado, são suportados os métodos arrayBuffer(), bodyUsed, json(), headers, ok, redirect, status, statusText, text(), type e url, enquanto no objeto Header, os métodos get(), getAll() e 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)); }
Além disso, pode-se notar a publicação servidor Aplicativos NGINX Unit 1.22, que oferece uma solução para executar aplicativos web em várias linguagens de programação (Python, PHP, Perl, Ruby, Go, JavaScript/Node.js e Java). Sob a gestão do NGINX Unit, é possível executar simultaneamente vários aplicativos em diferentes linguagens de programação, cujos parâmetros de execuçã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.
Na nova versão do NGINX Unit, o foco principal foi na melhoria da estabilidade, na ampliação das ferramentas de teste e na correção de erros. Nos pacotes gerados para Linux, o usuário e o grupo sob os quais o NGINX Unit é executado foram alterados. Em vez de nobody:nobody, os processos agora são executados sob um usuário separado, unit, no grupo unit. A compatibilidade com a API Stream dos objetos ServerRequest e ServerResponse do módulo Node.js foi assegurada. Na opção "path" para aplicativos Python, agora é permitido especificar vários diretórios.
Fonte: opennet.ru
