Após 13 meses de desenvolvimento, foi apresentada a nova versão estável do servidor HTTP de alto desempenho e proxy multifuncional nginx 1.22.0, que incorpora as alterações acumuladas na ramificação principal 1.21.x. No futuro, todas as mudanças na ramificação estável 1.22 estarão relacionadas à correção de erros graves e vulnerabilidades. Em breve, será formada a ramificação principal do nginx 1.23, onde o desenvolvimento de novos recursos continuará. Para usuários comuns, que não precisam garantir compatibilidade com módulos de terceiros, recomenda-se usar a ramificação principal, a partir da qual as versões do produto comercial Nginx Plus são lançadas a cada três meses.
De acordo com o relatório de abril da empresa Netcraft, o nginx é utilizado em 20,08% de todos os sites ativos (um ano atrás, 20,15%; dois anos atrás, 19,56%), o que corresponde à segunda posição em popularidade nessa categoria (a participação do Apache é de 22,58% (um ano atrás, 25,38%); Cloudflare — 10,42% (8,51%); Google — 8,89% (10,09%). Ao considerar todos os sites, o nginx mantém a liderança, ocupando 31,13% do mercado (um ano atrás, 35,34%; dois anos atrás, 36,91%), enquanto a participação do Apache é de 23,08% (25,98%); OpenResty (plataforma baseada no nginx e LuaJIT) — 8,01% (6,55%); Cloudflare — 5,49%; Microsoft IIS — 4% (5,96%).
Entre os milhões de sites mais visitados no mundo, a participação do nginx é de 21,79% (um ano atrás, 23,06%; dois anos atrás, 25,54%). Atualmente, cerca de 361 milhões de sites estão sob o gerenciamento do nginx (um ano atrás, 419 milhões). Segundo dados da W3Techs, o nginx é utilizado em 33,5% dos sites entre os milhões mais visitados; em maio do ano passado, esse número era de 33,8%, e no ano anterior, de 31,9%. A participação do Apache caiu de 33,8% para 31,5% em um ano, enquanto a do Microsoft IIS caiu de 7% para 6%. A participação do LiteSpeed aumentou de 8,5% para 12,1%, e a do Node.js de 1,2% para 1,9%. Na Rússia, o nginx é utilizado em 79,8% dos sites mais visitados (um ano atrás, 79,1%).
As melhorias mais notáveis adicionadas durante a formação da ramificação principal 1.21.x:
- Nas diretivas "proxy_ssl_certificate", "proxy_ssl_certificate_key", "grpc_ssl_certificate", "grpc_ssl_certificate_key", "uwsgi_ssl_certificate" e "uwsgi_ssl_certificate_key", foi adicionada a compatibilidade com variáveis.
- O módulo de proxy de email agora suporta o modo de «pipelining» para transmitir várias solicitações POP3 ou IMAP em uma única conexão, assim como uma nova diretiva «max_errors», que define o número máximo de erros de protocolo após o qual a conexão será encerrada.
- Foi implementada a transmissão dos cabeçalhos «Auth-SSL-Protocol» e «Auth-SSL-Cipher» servidor autenticação do proxy de email.
- O módulo stream agora suporta a extensão TLS ALPN. Para determinar a lista de protocolos suportados pelo ALPN (h2, http/1.1), foi proposta a diretiva ssl_alpn, e para obter informações sobre o protocolo ALPN acordado com o cliente, existe a variável $ssl_alpn_protocol.
- O módulo stream adicionou o parâmetro «fastopen», que ativa o modo «TCP Fast Open» para sockets de escuta.
- Foi implementada a escapagem de caracteres «»», «», «\», «^», «`», «{«, «|» e «}» ao fazer proxy com alteração de URI.
- O módulo stream adicionou a diretiva proxy_half_close, que permite configurar o comportamento ao encerrar uma conexão TCP proxy em um dos lados («TCP half-close»).
- No módulo ngx_http_mp4_module, foi adicionada uma nova diretiva mp4_start_key_frame para transmissão de fluxo de vídeo, começando a partir do quadro-chave.
- Foi adicionada a variável $ssl_curve, que retorna o tipo de curva elíptica escolhida para a negociação de chaves na sessão TLS.
- Na diretiva «sendfile_max_chunk», o valor padrão foi alterado para 2 megabytes;
- Compatibilidade com a biblioteca OpenSSL 3.0 foi garantida. O suporte à chamada SSL_sendfile() foi adicionado ao utilizar o OpenSSL 3.0.
- A construção com a biblioteca PCRE2, que oferece funções para manipulação de expressões regulares, está habilitada por padrão.
- Ao carregar certificados servidor foi implementado o uso dos níveis de segurança suportados a partir do OpenSSL 1.1.0, que podem ser configurados através do parâmetro «@SECLEVEL=N» na diretiva ssl_ciphers.
- O suporte ao conjunto de cifras de exportação foi encerrado.
- Na API de filtragem do corpo da solicitação, a bufferização de dados processados foi permitida.
- Na plataforma FreeBSD, o suporte para a chamada de sistema sendfile, que organiza a transmissão direta de dados entre um descritor de arquivo e um socket, foi melhorado. O modo sendfile(SF_NODISKIO) está sempre ativado e o suporte ao modo sendfile(SF_NOCACHE) foi adicionado.
- O suporte à instalação de conexões HTTP/2 utilizando a extensão NPN (Negociação de Próximo Protocolo) ao invés de ALPN foi encerrado.
- A proteção contra requisições HTTP/1.0 que incluem o cabeçalho HTTP "Transfer-Encoding" (introduzido na versão do protocolo HTTP/1.1) foi garantida.
- A proteção contra ataques de "HTTP Request Smuggling" foi reforçada em sistemas de frontend-backend, que permitem a interferência no conteúdo de solicitações de outros usuários processadas no mesmo fluxo entre o frontend e o backend. O Nginx agora sempre retorna um erro ao usar o método CONNECT; quando os cabeçalhos "Content-Length" e "Transfer-Encoding" são especificados simultaneamente; na presença de espaços ou caracteres de controle na linha de solicitação, no nome do cabeçalho HTTP ou no valor do cabeçalho "Host".
Fonte: opennet.ru
