Após um ano de desenvolvimento, uma nova branch estável do servidor HTTP de alto desempenho e proxy multissocket nginx 1.28.0 foi lançada, incorporando as mudanças acumuladas na branch principal 1.27.x. Futuramente, todas as alterações na branch estável 1.28 estarão relacionadas à correção de erros graves e vulnerabilidades. Em breve, será formada a branch principal nginx 1.29, onde o desenvolvimento de novas funcionalidades continuará. Para usuários comuns, que não precisam garantir compatibilidade com módulos de terceiros, recomenda-se usar a branch principal, a partir da qual lançamentos do produto comercial Nginx Plus são feitas a cada três meses.
De acordo com o relatório de março da empresa Netcraft, aproximadamente 245 milhões de sites estão rodando sob nginx (245 milhões no ano passado, 289 milhões há dois anos). O nginx é utilizado em 17,89% de todos os sites ativos (18,15% no ano passado, 18,94% há dois anos), o que corresponde à primeira posição em popularidade nessa categoria (a participação do Apache é de 16,03% (20,09% no ano passado, 20,52% há dois anos), Cloudflare — 17,81% (14,12%, 11,32%), Google — 9,89% (10,41%, 9,89%).
Ao considerar todos os sites, o nginx mantém a liderança, capturando 20,48% do mercado (22,31% no ano passado, 25,94% há dois anos), enquanto a participação do Apache é de 16,03% (20,17%, 20,58%), Cloudflare — 12,87% (11,24%, 10,17%), OpenResty (plataforma baseada em nginx e LuaJIT) — 9,36% (7,93%, 7,94%).
Entre o milhão de sites mais visitados do mundo, o nginx ocupa a segunda posição com uma participação de 20,37% (20,63% no ano passado, 21,37% há dois anos). O primeiro lugar é mantido pela Cloudflare — 22,32% (22,59% no ano passado, 21,62% há dois anos). A participação do Apache httpd é de 17,95% (20,09%, 21,18%).
De acordo com a W3Techs, o nginx é utilizado em 33,8% dos sites do milhão mais visitados (em abril do ano passado, esse número era de 34,3%, e há dois anos era de 34,5%). A participação do Apache caiu de 30,1% para 26,3%, enquanto a do Microsoft IIS diminuiu de 5% para 4%. A participação do Node.js aumentou de 3,2% para 4,4%, e a do LiteSpeed subiu de 12,9% para 14,6%.
As melhorias mais notáveis adicionadas durante a formação da branch principal 1.27.x:
- Para conexões que utilizam o protocolo QUIC, foi adicionada a suporte ao algoritmo de controle de sobrecarga de rede CUBIC (RFC 9438), que trabalha aumentando gradualmente o tamanho da janela de sobrecarga até que a perda de pacotes ocorra, após o que o tamanho da janela é revertido ao valor anterior à perda. Nos testes realizados, o uso do CUBIC permitiu reduzir o tempo de transferência de um arquivo de 500MB em 24% com latências de 40ms e BDP de 750K (Bandwidth Delay Product) e em 73% com latências de 100ms e BDP de 9M.
- No módulo stream, foi adicionada a suporte à verificação de revogação de certificados de clientes, utilizando o protocolo OCSP (Online Certificate Status Protocol).
- O módulo stream implementou suporte para a técnica de verificação de revogação de certificados OCSP Stapling, que consiste em que, ao estabelecer uma conexão TLS, a resposta OCSP validada por uma autoridade certificadora é transmitida pelo servidor que hospeda o site, sem a necessidade de uma consulta direta à autoridade certificadora.
- Na inicialização e atualização da configuração, o cache foi implementado. de certificados SSL, das chaves e CRL (Lista de Revogação de Certificados).
- Foram adicionadas funcionalidades para reduzir o consumo de recursos e diminuir a carga do CPU ao utilizar TLS em configurações com um grande número de blocos server e location. As mudanças permitem, em vez de criar um contexto SSL (SSL_CTX em OpenSSL) separado para cada bloco de configuração, usar o contexto SSL existente do bloco pai.
- Na diretiva "ssl_client_certificate", foi garantido o suporte para certificados com informações adicionais.
- Para a verificação de certificados SSL de clientes, a diretiva "ssl_client_certificate" não é mais obrigatória.
- No módulo ngx_mail_proxy_module, foi adicionado suporte para um modo IMAP LOGIN específico do SmarterMail com resposta CAPABILITY não etiquetada.
- No módulo ngx_http_proxy_module, foi adicionada a diretiva "proxy_pass_trailers", que permite a transmissão de campos de cabeçalho no final da resposta do servidor proxied para o cliente.
- Na diretiva "server", utilizada no bloco "upstream", foi adicionado suporte para o parâmetro "resolve", que inclui o monitoramento de mudanças endereços IP para o nome de domínio utilizado e a atualização automática da configuração do bloco "upstream" sem a necessidade de reiniciar o nginx em caso de alteração de endereço.
- Foi adicionada a possibilidade de usar variáveis nas diretrizes "proxy_limit_rate", "fastcgi_limit_rate", "scgi_limit_rate" e "uwsgi_limit_rate".
- Nas diretrizes "proxy_bind", "fastcgi_bind", "grpc_bind", "memcached_bind", "scgi_bind" e "uwsgi_bind", assim como no endereço do cliente no módulo ngx_http_realip_module, é permitido especificar endereços IPv6 entre colchetes sem número da porta.
- Foi adicionada a diretiva "keepalive_min_timeout", que define o timeout durante o qual o nginx não encerrará a conexão keep-alive com o cliente.
- Por padrão, os protocolos TLSv1 e TLSv1.1 estão desativados.
- Foram resolvidos problemas de carregamento lento de arquivos de configuração devido à reanálise do mesmo conjunto de certificados TLS, chaves e listas de autoridades certificadoras. A reinicialização da configuração foi acelerada ao reutilizar objetos TLS que não mudaram, como certificados, chaves e CRL. Para desativar a herança de objetos ao atualizar a configuração, foi adicionada a diretiva "ssl_object_cache_inheritable."
- Foi adicionado cache para certificados e chaves carregados usando variáveis nas diretivas (por exemplo, "ssl_certificate /etc/ssl/$ssl_server_name.crt"). Foram adicionadas as diretivas "ssl_certificate_cache", "proxy_ssl_certificate_cache", "grpc_ssl_certificate_cache" e "uwsgi_ssl_certificate_cache" para gerenciar o cache. Através dessas diretivas, é possível configurar o tamanho máximo do cache, a duração das entradas e o tempo de limpeza das entradas não utilizadas. Por exemplo: "ssl_certificate_cache max=1000 inactive=20s valid=1m;".
- O consumo de memória foi reduzido ao processar requisições de longa duração em configurações que utilizam as diretrizes "gzip", "gunzip", "ssi", "sub_filter" ou "grpc_pass."
- O tamanho máximo dos caches de sessões SSL em memória compartilhada foi aumentado para 8192.
- Foi estabelecida a compilação com a biblioteca C Musl.
- Trabalhou-se na otimização de desempenho e na correção de bugs na implementação do HTTP/3.
Além disso, vale mencionar a publicação do lançamento do projeto FreeNginx 1.28.0, que desenvolve um fork do Nginx. O desenvolvimento do fork é liderado por Maxim Dunin, um dos desenvolvedores-chave do Nginx. O FreeNginx é posicionado como um projeto sem fins lucrativos, garantindo o desenvolvimento da base de código do Nginx sem intervenção corporativa. Entre as mudanças específicas na linha do FreeNginx 1.28:
- O parâmetro "off" na diretiva "pid", que desativa a criação do arquivo PID.
- Limitação da intensidade de gravação de mensagens no log de erros para proteger contra o preenchimento do log com mensagens típicas.
- Implementação do parâmetro multipath na diretiva listen para suportar Multipath TCP.
- Suporte ao cabeçalho HTTP "Age" para determinar a vida útil das entradas no cache.
- Adição dos métodos de autenticação XOAUTH2 e OAUTHBEARER no módulo mail_proxy.
Fonte: opennet.ru
