Anunciando o NGINX Plus R32

NGINX | 28 de maio de 2024

Temos o prazer de anunciar a disponibilidade do NGINX Plus Release 32 (R32). Baseado no NGINX Open Source, o NGINX Plus é o único software completo que reúne servidor web, balanceador de carga, proxy reverso, cache de conteúdo e gateway de API.

Os recursos novos e aprimorados do NGINX Plus R32 incluem:

  • Cache de certificados SSL — O NGINX Plus R32 traz melhorias significativas no tempo de inicialização do NGINX e no uso de memória em configurações com um grande número de locais que utilizam repetidamente os mesmos pares de certificado/chave SSL.
  • Módulo Stream_pass — O NGINX Plus R32 agora permite que o módulo stream funcione como um roteador, possibilitando que as conexões sejam encaminhadas condicionalmente do módulo stream para outros módulos, como http e mail, ou de volta para o próprio stream.
  • Imagens oficiais de contêiner do NGINX Plus — O NGINX Plus R32 passa a disponibilizar imagens oficiais de contêiner do NGINX Plus para ambientes de execução de contêineres com e sem privilégios. Além disso, ambos os métodos de implantação oferecem imagens opcionais de contêiner que incluem o NGINX Agent, um daemon complementar que permite uma integração perfeita com as soluções de plano de gerenciamento do NGINX.

Completando esta versão, há novos recursos e correções de bugs herdados do NGINX Open Source, além de atualizações no módulo JavaScript do NGINX.

Mudanças importantes de comportamento

Observação: se você estiver atualizando de uma versão diferente do NGINX Plus R31, consulte a seção Alterações importantes de comportamento nos blogs de anúncios anteriores para todas as versões entre a sua versão atual e esta.

Descontinuação do módulo OpenTracing

O módulo OpenTracing, introduzido no NGINX Plus R18, está sendo descontinuado e está programado para ser removido no NGINX Plus R34. Até lá, os pacotes associados serão disponibilizados em todas as versões do NGINX Plus. Recomendamos enfaticamente substituir o uso do módulo OpenTracing pelo módulo OpenTelemetry, introduzido no NGINX Plus R29.

Remoção do módulo ModSecurity

O suporte ao módulo ModSecurity foi encerrado em 31 de março de 2024. Como resultado, os pacotes modsec foram removidos do repositório do NGINX Plus e não estarão mais disponíveis nesse repositório daqui em diante.

Atualização da chave PGP

Os pacotes do NGINX Open Source e do NGINX Plus são assinados com uma chave PGP. Essa chave expiraria em 16 de junho de 2024. Atualizamos a data de expiração da chave para que os pacotes existentes possam continuar sendo verificados após 16 de junho de 2024. Geraremos novos pares de chaves para assinar os pacotes das próximas versões.

Todos os usuários do NGINX devem baixar e instalar a chave PGP atualizada seguindo estas etapas:

No Ubuntu/Debian:

wget -qO - https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

No RHEL/CentOS:

sudo rpm -e gpg-pubkey-7bd9bf62-5762b5f8
sudo rpm --import https://nginx.org/keys/nginx_signing.key

Você não poderá verificar as assinaturas dos seus softwares após 16 de junho de 2024 até atualizar sua chave.

Política futura de empacotamento e lançamento

Nas próximas versões do NGINX Plus, simplificaremos nossa política de empacotamento e lançamento. O NGINX Plus será compilado e testado somente nas versões mais recentes das distribuições de sistemas operacionais compatíveis. Se você estiver instalando o NGINX Plus em distribuições mais antigas, seu gerenciador de pacotes poderá sugerir a atualização das bibliotecas e dos pacotes dependentes.

Alterações no suporte a plataformas

As seguintes alterações foram feitas nas plataformas compatíveis nesta versão.

Novos sistemas operacionais compatíveis:

  • Ubuntu 24.04

Sistemas operacionais mais antigos removidos:

  • FreeBSD 12, que chegou ao fim da vida útil em 31 de dezembro de 2023

Sistemas operacionais mais antigos descontinuados e com remoção programada no NGINX Plus R33:

  • CentOS7/RHEL7/Oracle Linux 7
  • Alpine Linux 3.16

Novos recursos em detalhes

Cache de certificados SSL para melhorar o comportamento do NGINX sob carga

Anteriormente, o NGINX carregava um certificado, uma chave ou uma lista de revogação de certificados sempre que esses itens eram referenciados na configuração do NGINX. Isso significava que várias referências ao mesmo objeto resultavam no mesmo número de recarregamentos desse objeto. Essa latência aumentava ao herdar diretivas, como listas de certificados confiáveis. Em determinadas condições, esse comportamento afetava significativamente o tempo de inicialização do NGINX e podia exigir grandes quantidades de memória para armazenar as configurações.

Com o novo comportamento, as diretivas SSL agora fazem referência a arquivos de certificado armazenados em cache e a objetos relacionados. Como resultado, o consumo de memória e o tempo de carregamento de configurações que fazem referência repetidamente aos mesmos objetos de certificado são drasticamente reduzidos. O benefício é mais evidente em casos que envolvem configurações extensas do NGINX, nas quais um pequeno conjunto de certificados confiáveis é referenciado em um grande número de blocos location.

Veja uma representação visual da melhoria no tempo de carregamento quando o NGINX é configurado com aproximadamente 5.400 blocos de localização (de nível superior e aninhados) e 878 certificados.

melhoria no tempo de carregamento

Observe a queda significativa nos tempos de carregamento no lado direito do gráfico, onde o tempo médio de carregamento diminui de aproximadamente 40 segundos antes da alteração para cerca de 6 segundos com o novo comportamento.

Passe conexões do módulo Stream para outros módulos

O NGINX Plus R32 herda um recurso do NGINX open source 1.25.5 que adiciona uma nova camada de configurabilidade ao NGINX. Especificamente, o módulo stream do NGINX agora pode funcionar como um roteador, atuando como um proxy capaz de encaminhar conexões do contexto stream para outros contextos, como http e mail, ou para um servidor virtual separado dentro do próprio contexto stream.

Essa funcionalidade está disponível como parte do módulo ngx_stream_pass_module, introduzido nesta versão. O módulo tem uma única diretiva, “pass”, que pode ser usada para especificar o endereço ao qual as conexões dos clientes serão encaminhadas. O endereço pode ser especificado por uma combinação de endereço IP e porta, por um caminho de socket ou por meio de variáveis do NGINX.

Com essa funcionalidade, os clientes que desejam direcionar todo o tráfego por um único endpoint L4 agora podem encerrar conexões SSL no contexto de stream L4 e encaminhá-las para outros módulos (http, mail) ou outros servidores virtuais dentro do contexto de stream. Além disso, as conexões SSL podem ser encerradas condicionalmente com base em nomes de servidor ou protocolos, enquanto o tráfego restante é encaminhado por proxy para outro destino. Isso possibilita um novo conjunto de comportamentos de configuração para gerenciar o tráfego a partir de um único endpoint.

O trecho de configuração a seguir encerra as conexões SSL no módulo stream e as encaminha condicionalmente para o contexto http ou para outro servidor virtual no contexto stream, com base no nome de servidor solicitado.

http {
    server {
        listen 8000;

        location / {
            return 200 foo;
        }
    }
}

stream {
	 map $ssl_server_name $pass_port {
		foo.example.com 8000;
		default 9001;
	
	}

    server {
        listen 9000 ssl;

        ssl_certificate     domain.crt;
        ssl_certificate_key domain.key;

        pass 127.0.0.1:$pass_port;
    }
	server{
		listen 9001;
		return bar\n;
	}

}

Neste exemplo, todas as conexões SSL são encerradas no bloco de servidor stream. Dependendo do nome do servidor na solicitação recebida, as conexões são encaminhadas para o servidor http que escuta na porta 8000 ou para o servidor virtual stream que escuta na porta 9001.

Outra aplicação do módulo atende a casos de uso em que um módulo de terceiros não oferece suporte ao encerramento de SSL. Nesses cenários, o módulo stream_pass pode encerrar conexões criptografadas por TLS antes de encaminhá-las ao módulo de terceiros.

Este exemplo demonstra como o módulo RTMP, que não oferece suporte nativo a SSL, pode usar o módulo stream_pass para aceitar tráfego criptografado por TLS.

rtmp {
    server {
        listen 1935;#rtmp
	
	application foo{
		
		live on;
        }
    }
}

stream {
    server {
        listen 1936 ssl; #rtmps

        ssl_certificate     domain.crt;
        ssl_certificate_key domain.key;

        pass 127.0.0.1:1935;
    }
}

Neste trecho de configuração, a conexão SSL é encerrada no bloco de servidor stream e encaminhada para o rtmp. Para o módulo RTMP, a conexão parece não estar criptografada, o que elimina a necessidade de personalização adicional ou de sobrecarga de processamento para oferecer suporte a conexões SSL.

Imagens de contêiner do NGINX Plus

O NGINX Plus R32 disponibiliza oficialmente imagens de contêiner do NGINX Plus para execução privilegiada e não privilegiada do NGINX Plus. Ambos os tipos de contêiner também estão disponíveis com instalações opcionais do NGINX Agent para facilitar a conexão com as plataformas de gerenciamento compatíveis com o NGINX. As imagens podem ser baixadas do registro do NGINX, disponível em: private-registry.nginx.com. Siga estas instruções para acessar a imagem usando seu certificado e sua chave do NGINX Plus ou um JSON Web Token (JWT).

Outras melhorias e correções de bugs no NGINX Plus R32

Correção de bug no módulo MQTT

  • Pacotes malformados ao usar propriedades padrão: Esta versão contém uma correção para um problema que gerava pacotes malformados no módulo Transporte de Telemetria de Enfileiramento de Mensagens (MQTT), introduzido no NGINX Plus R29. Anteriormente, quando o campo de propriedades estava presente e continha valores padrão para todas as propriedades da mensagem MQTT Connect, o comprimento do pacote de saída não levava em conta o campo de comprimento das propriedades (1 byte). Isso fazia com que o comprimento do pacote fosse 1 byte menor do que o esperado, resultando em um pacote malformado. Esta correção na versão R32 resolve o problema.

Correção de bug no módulo zone_sync

  • Vazamento de memória ao recarregar a configuração: Anteriormente, as operações de sincronização da fila pendente usavam elos de cadeia alocados em um pool separado que nunca era liberado. Isso causava vazamentos de memória no processo mestre e em todos os processos de trabalho. A correção nesta versão restaura uma implementação anterior de sincronização de zonas que usa um pool de ciclo para a fila pendente.

Correções de segurança

Os seguintes possíveis problemas de segurança foram identificados e corrigidos na implementação experimental de HTTP3/QUIC.

  • Estouro de heap com gravação (CVE-2024-32760): Instruções não divulgadas do codificador HTTP/3 podem fazer com que os processos de trabalho do NGINX sejam encerrados ou causar outros possíveis impactos.
  • Estouro de pilha/uso após liberação (CVE-2024-31079): Solicitações HTTP/3 não divulgadas podem fazer com que os processos de trabalho do NGINX sejam encerrados ou causar outros possíveis impactos. Esse ataque exige que uma solicitação seja enviada em um momento específico durante o processo de encerramento da conexão, sobre o qual o invasor não tem visibilidade e exerce influência limitada.
  • Desreferência de ponteiro nulo com cabeçalho vazio (CVE-2024-35200): Solicitações HTTP/3 não divulgadas podem fazer com que os processos de trabalho do NGINX sejam encerrados ou causar outros possíveis impactos.
  • Exposição de memória durante o handshake QUIC (CVE-2024-34161): Quando a infraestrutura de rede oferece suporte a uma Unidade Máxima de Transmissão (MTU) de 4096 ou superior sem fragmentação, mensagens QUIC não divulgadas podem fazer com que os processos de trabalho do NGINX sejam encerrados ou causar o vazamento de memória liberada anteriormente.

Alterações herdadas do NGINX Open Source

O NGINX Plus R32 é baseado no NGINX Open Source 1.25.5 e herda alterações funcionais, recursos e correções de bugs implementados desde o lançamento do NGINX Plus R31 (no NGINX 1.25.4 e 1.25.5).

Recursos:

  • Servidores virtuais no módulo stream.
  • O ngx_stream_pass_module.
  • Os parâmetros "deferred", "accept_filter" e "setfib" da diretiva "listen" no módulo stream.
  • Detecção do tamanho da linha de cache para algumas arquiteturas.
  • Suporte ao Homebrew no Apple Silicon.

Correções de bugs:

  • Correções de bugs e melhorias na compilação cruzada para Windows.
  • Encerramento inesperado da conexão ao usar 0-RTT no QUIC.
  • Conexões com operações de AIO pendentes podem ser encerradas prematuramente durante o desligamento normal de processos de trabalho antigos.
  • Os alertas de vazamento de soquetes não são mais registrados quando um encerramento rápido é solicitado após o encerramento normal de processos de trabalho antigos.
  • Um erro de descritor de soquete, um vazamento de soquete ou uma falha de segmentação em um processo de trabalho (para proxy SSL) poderia ocorrer se AIO fosse usado em uma subsolicitação.
  • Uma falha de segmentação poderia ocorrer em um processo de trabalho se o proxy SSL fosse usado em conjunto com a diretiva "image_filter" e os erros com o código 415 fossem redirecionados com a diretiva "error_page".
  • Correções de bugs e melhorias no HTTP/3.

Segurança:

  • Ao usar HTTP/3, pode ocorrer uma falha de segmentação em um processo de trabalho durante o processamento de uma sessão QUIC especialmente criada (CVE-2024-24989, CVE-2024-24990).

Para ver a lista completa de novas alterações, recursos, correções de bugs e soluções alternativas herdadas de versões recentes, consulte o arquivo de alterações do NGINX.

Alterações no módulo JavaScript do NGINX

O NGINX Plus R32 incorpora alterações do módulo NGINX JavaScript (njs) versão 0.8.4. A seguir, apresentamos uma lista das principais alterações no njs desde a versão 0.8.2 (que era a versão fornecida com o NGINX Plus R31).

Recursos

  • Recurso: o cabeçalho Server pode ser definido para os cabeçalhos de saída.
  • Recurso: suporte ao mecanismo QuickJS na CLI.

Alterações

  • Melhoria: validação dos argumentos URI e args em r.subrequest().
  • Melhoria: verificações de variáveis js_set duplicadas.

Correções de bugs

  • Correção de bug: corrigido o Headers.set().
  • Correção de bug: corrigido o js_set com valores de Buffer.
  • Correção de bug: corrigido o método clear() de um dicionário compartilhado quando um tempo limite não é especificado.
  • Correção de bug: corrigidas as estatísticas de stub_status quando js_periodic está habilitado.
  • Correção de bug: corrigida a compilação com o libxml2 2.12 e versões posteriores.
  • Correção de bug: corrigido o construtor Date para lidar com estouros e valores NaN.
  • Correção de bug: corrigido o underflow em querystring.parse().
  • Correção de bug: corrigida uma possível leitura além dos limites do buffer em String.prototype.match().
  • Correção de bug: corrigida a análise sintática de loops for-in.
  • Correção de bug: corrigida a análise de literais hexadecimais, octais e binários sem dígitos.
  • Correção de bug: corrigido o método clear() de um dicionário compartilhado sem tempo limite, introduzido na versão 0.8.3.
  • Correção de bug: corrigido o método r.send() de um dicionário compartilhado sem tempo limite ao usar um argumento Buffer.
  • Correção de bug: corrigido o atob() com strings base64 sem preenchimento.

Para obter uma lista completa de todos os recursos, alterações e correções de bugs, consulte o Changelog do njs.

Atualize ou experimente o NGINX Plus

Se você estiver usando o NGINX Plus, recomendamos enfaticamente que faça a atualização para o NGINX Plus R32 o mais rápido possível. Além de todos os excelentes novos recursos, você também terá acesso a várias correções e melhorias adicionais, facilitando o suporte do NGINX caso precise abrir um chamado.

Se você ainda não usa o NGINX Plus, recomendamos que experimente. Você pode usá-lo para segurança, balanceamento de carga e como gateway de API, ou como um servidor web com suporte completo, monitoramento avançado e APIs de gerenciamento. Comece hoje mesmo com uma avaliação gratuita de 30 dias.

Compartilhar
Tags: F5 NGINX, News

Publicações relacionadas no blog

Como o F5 NGINX One aprimora o gerenciamento e a observabilidade
NGINX | 10/10/2024

Como o F5 NGINX One aprimora o gerenciamento e a observabilidade

Descubra como o F5 NGINX One aprimora o gerenciamento e a observabilidade de ambientes híbridos e multicloud ao oferecer um console web centralizado baseado em SaaS, com insights em tempo real, conformidade automatizada e gerenciamento simplificado de configurações.

Do OpenAPI ao NGINX como gateway de API usando uma API declarativa
NGINX | 17/06/2024

Do OpenAPI ao NGINX como gateway de API usando uma API declarativa

Descubra como transformar uma definição de esquema OpenAPI em uma configuração NGINX totalmente funcional, operando como um API Gateway com a segurança de um Web Application Firewall e um Portal do Desenvolvedor, usando uma abordagem declarativa de API.

Como gerenciar picos repentinos de tráfego e sobrecarga do servidor
NGINX | 14/07/2021

Como gerenciar picos repentinos de tráfego e sobrecarga do servidor

Picos de tráfego e sobrecarga de servidores são preocupações sérias para varejistas online em qualquer época, mas especialmente durante a “Cyber Season” de compras de fim de ano. Detalhamos como você pode aproveitar as soluções de entrega de aplicações de nível de produção da NGINX para se preparar para aumentos repentinos de tráfego.

Distribuição segura de chaves privadas SSL com o NGINX
NGINX | 02/04/2019

Distribuição segura de chaves privadas SSL com o NGINX

Descrevemos três maneiras progressivamente mais seguras de proteger chaves privadas SSL ao configurar o NGINX para processar tráfego HTTPS: permitir acesso de leitura apenas ao usuário root, criptografar as chaves com senhas armazenadas separadamente e distribuir as senhas a partir de um repositório central.

Agrupando solicitações de API em lotes com NGINX Plus e o módulo JavaScript do NGINX
NGINX | 24/05/2018

Agrupando solicitações de API em lotes com NGINX Plus e o módulo JavaScript do NGINX

O módulo JavaScript do NGINX lançado com o NGINX Plus R15 oferece suporte a subsolicitações, possibilitando uma classe totalmente nova de casos de uso para o NGINX Plus. Este exemplo completo também usa a API do NGINX Plus e os módulos de chave-valor para converter solicitações de API dos clientes em solicitações separadas para as APIs dos microsserviços que compõem um aplicativo.

Como superar o esgotamento de portas efêmeras no NGINX e no NGINX Plus
NGINX | 19/04/2016

Como superar o esgotamento de portas efêmeras no NGINX e no NGINX Plus

Confira dicas para evitar o esgotamento de portas efêmeras com ajustes no kernel do Linux, conexões keepalive e conexões vinculadas dinamicamente a endereços IP locais.