Anunciando o NGINX Plus R21

NGINX | 07 de abril de 2020

Temos o prazer de anunciar que o NGINX Plus Release 21 (R21) já está disponível. Baseado no NGINX Open Source, o NGINX Plus é a única solução completa que reúne balanceador de carga, cache de conteúdo, servidor web e gateway de API. Com mais de 450 milhões de sites que utilizam o NGINX, o NGINX Plus R21 está mais confiável e seguro do que nunca, com foco principalmente em correções de bugs e melhorias de estabilidade do NGINX Open Source.

Os novos recursos do NGINX Plus R21 incluem:

  • Proxy dinâmico de gRPC – Adicionamos suporte a variáveis ao encaminhar conexões gRPC para serviços gRPC de back-end. Isso permite rotear dinamicamente as conexões gRPC para grupos de serviços com base nos atributos do cliente.
  • Aprimoramentos no módulo JavaScript do NGINX – O módulo JavaScript do NGINX (njs) foi atualizado para a versão 0.3.9, com várias correções de bugs e aprimoramentos funcionais adicionais relacionados a subsolicitações e ao suporte ao sistema de arquivos.

Mudanças importantes de comportamento

  • Solicitações aceitáveis – De acordo com a RFC 7230, o NGINX Plus não permite mais solicitações de clientes com vários cabeçalhos Host.
  • Novos sistemas operacionais compatíveis – Alpine Linux 3.11.
  • Sistemas operacionais antigos que não são mais compatíveis – plataformas de 32 bits (arquiteturas i386).

Investindo em qualidade

Software eficiente e qualidade de código são princípios fundamentais na forma como desenvolvemos o NGINX, tanto a versão de código aberto quanto o NGINX Plus.

A equipe do NGINX utiliza todas as ferramentas modernas de CI/CD e testes automatizados que se espera de qualquer software comercial. Testes diários da ramificação de desenvolvimento ativa revelam uma “densidade de defeitos” extraordinariamente baixa, de apenas 0,01 defeito a cada 1.000 linhas de código, em comparação com uma densidade média de 0,7 defeito a cada 1.000 linhas em bases de código de tamanho semelhante.

Também contratamos testes de penetração e revisões de código externos e independentes para componentes de código aberto e do NGINX Plus. Os testes de penetração e as revisões de código mais recentes identificaram vários problemas que foram corrigidos nesta versão.

Correções de bugs

No total, o NGINX Plus R21 inclui correções para 14 bugs:

  • Vazamento de soquete ao usar HTTP/2 (dois bugs distintos)
  • Vazamento de soquete ao usar subsolicitações no módulo njs e na diretiva aio directive
  • Possível esgotamento de memória no módulo WebDav module
  • Possível exposição de memória no módulo MP4 module
  • O código de status 494 foi retornado em vez de 400 quando erros com o código 494 foram redirecionados com a diretiva error_page directive
  • Pode ocorrer um tempo limite durante o processamento de solicitações em pipeline em uma conexão SSL
  • Poderia ocorrer uma falha de segmentação em um processo de trabalho se o grampeamento OCSP fosse usado
  • Uma falha de segmentação poderia ocorrer na inicialização ou durante a reconfiguração se a configuração incluísse a diretiva rewrite com uma string de substituição vazia
  • Uma falha de segmentação poderia ocorrer em um processo de trabalho se a diretiva break fosse usada em conjunto com a diretiva alias, ou em conjunto com a diretiva proxy_pass com um URI
  • Apenas o primeiro cabeçalho de solicitação Transfer-Encoding foi processado
  • A linha do cabeçalho de resposta Location pode conter dados inválidos se o URI da solicitação tiver sido reescrito para incluir um caractere nulo
  • As solicitações com corpo eram processadas incorretamente ao retornar redirecionamentos com a diretiva error_page directive
  • Erro na diretiva debug_points ao usar HTTP/2

Observe que nenhum desses bugs era crítico e não há registros de CVE associados.

Investindo no roadmap do NGINX Plus

No momento deste lançamento, estamos trabalhando intensamente em nosso roadmap de 2020. Ainda este ano, esperamos disponibilizar uma implementação pronta para produção do HTTP/3 (também conhecido como QUIC). Se você tiver interesse em acompanhar ou testar essa tecnologia, fique atento aos patches experimentais nas próximas semanas.

Novos recursos em detalhes

Proxy dinâmico de gRPC

NGINX Plus R15 passou a oferecer suporte ao roteamento e ao balanceamento de carga do tráfego gRPC para grupos de upstream. Você pode usar o NGINX Plus para rotear o tráfego gRPC incluindo a diretiva grpc_pass.

O NGINX Plus R21 introduz suporte a variáveis na diretiva grpc_pass para oferecer políticas de roteamento dinâmicas e orientadas por API que também abrangem cargas de trabalho gRPC. Isso permite atender a casos de uso como:

  • Teste A/B – Distribua estatisticamente as solicitações gRRC entre vários upstreams para determinar qual deles apresenta melhor desempenho.
  • Roteamento de depuração – Encaminhe o tráfego para um serviço gRPC de produção, mas direcione as solicitações com atributos específicos (endereços IP de origem, metadados gRPC) para um serviço gRPC de depuração.

A configuração a seguir é um exemplo de implementação de roteamento de depuração.

Carregando exemplo de código…

Na linha 1, definimos um armazenamento de chave-valor que pode usar intervalos de rede como chave (habilitado pelo parâmetro type=ip). A linha 2 especifica que a variável $greeter_upstream é avaliada por meio de uma consulta ao armazenamento de chave-valor grpc-greeter, usando o endereço IP do cliente ($remote_addr) como chave.

Na linha 10, especificamos grpc://$greeter_upstream como parâmetro da diretiva grpc_pass, para realizar a terminação TLS e o roteamento dinâmico de solicitações gRPC com base na sub-rede IP do cliente.

Por exemplo, você pode executar o seguinte comando na instância do NGINX Plus para encaminhar as solicitações originadas da sub-rede 192.168.80.0/24 para grpc-servers-greeter-debug:

$ curl -iX POST -d '{"192.168.80.0/24":"grpc-servers-greeter-debug"}' http://localhost:8080/api/6/http/keyvals/grpc-greeter

Para direcionar o tráfego gRPC para o grupo de serviços de produção (grpc-servers-greeter-prod), execute o seguinte comando:

$ curl -iX PATCH -d '{"192.168.80.0/24":"grpc-servers-greeter-prod"}' https://localhost:8080/api/6/http/keyvals/grpc-greeter

Aprimoramentos no módulo JavaScript do NGINX

O módulo JavaScript do NGINX (njs) foi atualizado para a versão 0.3.9 com várias correções de bugs e algumas melhorias funcionais relacionadas a subsolicitações e ao suporte ao sistema de arquivos.

Subsolicitações

A função r.subrequest permite que o código njs faça solicitações HTTP assíncronas a qualquer URI. Isso possibilita muitos casos de uso, como chamadas de API para um servidor de autenticação externo, por exemplo, a introspecção de token OAuth 2.0. Esta versão traz duas melhorias significativas para as subsolicitações: promessas e subsolicitações desvinculadas.

[Editor – Os dois exemplos de casos de uso a seguir são apenas alguns dos muitos disponíveis para o módulo JavaScript do NGINX. Para ver uma lista completa, consulte Casos de uso do módulo JavaScript do NGINX.]

Promessas

As subsolicitações normalmente incluem uma função de callback que processa a resposta da subsolicitação. Agora, a função de callback pode ser omitida, usando promises do JavaScript para processar as respostas diretamente no código que faz a chamada. O exemplo a seguir mostra como subsolicitações sucessivas podem ser encadeadas em uma única sequência de código sem o uso de callbacks.

Carregando exemplo de código…

Subsolicitações desvinculadas

As subsolicitações são assíncronas e, anteriormente, precisavam ser invocadas por meio de uma diretiva js_content. Agora, as subsolicitações também podem ser acionadas por meio de uma diretiva js_set durante a avaliação de variáveis. Essas subsolicitações “desvinculadas” continuam funcionando de forma assíncrona, mas não retornam nenhum dado à função que as chamou, e qualquer resposta é ignorada.

O código de exemplo a seguir usa subsolicitações desvinculadas para enviar uma cópia dos cabeçalhos da solicitação a um sistema de gerenciamento de eventos e informações de segurança (SIEM) caso a quantidade total de dados trocados exceda 1 MB.

[Editor – A configuração a seguir foi atualizada para usar a diretiva js_import, que substituiu a diretiva js_include no NGINX Plus R23<.htmla>. Para obter mais informações, consulte a documentação de referência do módulo JavaScript do NGINX – a seção Exemplo de configuração mostra a sintaxe correta para os arquivos de configuração do NGINX e JavaScript.]

Carregando exemplo de código…

O código JavaScript é então executado na fase de log, solicitando a avaliação da variável quando gravamos o log de acesso.

Carregando exemplo de código…

Sistema de arquivos

O objeto de sistema de arquivos do JavaScript fs foi aprimorado para oferecer suporte a promises em operações assíncronas. Além disso, há novos métodos de sistema de arquivos: access(), realpath(), symlink(), e unlink().

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 R21 o mais rápido possível. Você também terá acesso a diversas correções e melhorias adicionais, além de facilitar o suporte da NGINX quando precisar abrir um chamado.

Antes de prosseguir com a atualização, leia atentamente os novos recursos e as mudanças de comportamento descritos nesta publicação do blog.

Se você ainda não experimentou o NGINX Plus, recomendamos que faça um teste – para segurança, balanceamento de carga e gateway de API, ou como um servidor web com suporte completo e APIs avançadas de monitoramento e gerenciamento. Você pode começar hoje mesmo com uma avaliação gratuita de 30 dias. Veja por si mesmo como o NGINX Plus pode ajudar você a disponibilizar e escalar suas aplicações.


Compartilhar

Sobre o autor

Liam Crilly
Liam CrillyDiretor Sênior de Gestão de Produtos

Mais publicações de Liam Crilly

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.