BLOG | NGINX

Anunciando o NGINX Plus R21

NGINX-Parte-de-F5-horiz-preto-tipo-RGB
Miniatura de Liam Crilly
Liam Crilly
Publicado em 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 é o único balanceador de carga, cache de conteúdo, servidor web e gateway de API tudo-em-um . Com mais de 450 milhões de sites confiando no NGINX , o NGINX Plus R21 está mais confiável e seguro do que nunca, com foco principal em correções de bugs e melhorias de estabilidade do NGINX Open Source.

Os novos recursos do NGINX Plus R21 incluem:

  • Proxy gRPC dinâmico – Adicionamos suporte a variáveis ao passar conexões gRPC para serviços gRPC de backend. Isso permite que você roteie dinamicamente conexões gRPC para grupos de serviços com base em atributos do cliente.
  • Melhorias no módulo NGINX JavaScript – O módulo NGINX JavaScript (njs) foi atualizado para a versão 0.3.9, com várias correções de bugs e melhorias funcionais adicionais relacionadas a sub-solicitações e suporte ao sistema de arquivos.

Mudanças importantes no comportamento

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

Investindo em Qualidade

Software eficiente e qualidade de código são princípios centrais de como construímos o NGINX, tanto o de código aberto quanto o NGINX Plus.

A equipe NGINX emprega todas as ferramentas modernas de CI/CD e testes automatizados que você espera de qualquer software comercial. Testes diários do ramo de desenvolvimento ativo mostram uma “densidade de defeitos” notavelmente baixa de apenas 0,01 defeitos por 1000 linhas de código, em comparação com uma densidade média de 0,7 defeitos por 1000 linhas para bases de código de tamanho semelhante.

Também encomendamos testes de penetração externos e independentes e revisões de código para componentes de código aberto e NGINX Plus. Os testes de penetração e revisões de código mais recentes identificaram vários problemas que são abordados 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 separados)
  • Vazamento de soquete ao usar sub-solicitações no módulo njs e na diretiva aio
  • Possível exaustão de memória no módulo WebDav
  • Divulgação potencial de memória no módulo MP4
  • Código de status494 foi devolvido em vez de400 quando erros com código494 foram redirecionados com a diretiva error_page
  • Pode ocorrer tempo limite ao manipular solicitações em pipeline em uma conexão SSL
  • Falha de segmentação pode ocorrer em um processo de trabalho se o grampeamento OCSP foi usado
  • A falha de segmentação pode ocorrer no início ou durante a reconfiguração se a configuração incluir a diretiva de reescrita com uma string de substituição vazia
  • A falha de segmentação pode ocorrer em um processo de trabalho se a diretiva break foi usada em conjunto com a diretiva alias ou em conjunto com a diretiva proxy_pass com um URI
  • Somente o primeiro cabeçalho de solicitação Transfer-Encoding foi processado
  • A linha do cabeçalho de resposta do local pode conter lixo se o URI da solicitação foi reescrito para um que contém um caractere nulo
  • Solicitações com corpos foram tratadas incorretamente ao retornar redirecionamentos com a diretiva error_page
  • Bug na diretiva debug_points ao usar HTTP/2

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

Investindo no Roteiro NGINX Plus

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

Novos recursos em detalhes

Proxy dinâmico gRPC

O NGINX Plus R15 introduziu suporte para roteamento e balanceamento de carga de tráfego gRPC para grupos upstream. Você pode aproveitar 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 fornecer políticas de roteamento dinâmicas e orientadas por API que se estendem às cargas de trabalho gRPC. Isso possibilita atender casos de uso como:

  • Teste A/B – Distribua estatisticamente as solicitações gRRC em vários upstreams para determinar qual deles tem melhor desempenho.
  • Roteamento de depuração – Roteie o tráfego para um serviço gRPC de produção, mas roteie 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.

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

Na linha 10, especificamos grpc://$greeter_upstream como o parâmetro para a diretiva grpc_pass , para terminação TLS e 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 rotear 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 alternar 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

Melhorias no módulo JavaScript NGINX

O módulo JavaScript NGINX (njs) foi atualizado para a versão 0.3.9 com diversas correções de bugs e algumas melhorias funcionais relacionadas a sub-solicitações e suporte ao sistema de arquivos.

Sub-solicitações

A função r.subrequest permite que o código njs faça solicitações HTTP assíncronas para qualquer URI. Isso tem muitos casos de uso possíveis, um exemplo notável sendo chamadas de API para um servidor de autenticação externo, por exemplo, introspecção de token OAuth 2.0 . Esta versão traz duas melhorias significativas para sub-solicitações: promessas e sub-solicitações desanexadas.

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

Promessas

As sub-solicitações geralmente incluem uma função de retorno de chamada que processa a resposta da sub-solicitação. Uma função de retorno de chamada agora pode ser omitida, usando promessas JavaScript como uma forma de processar respostas em linha com o código de chamada. O exemplo a seguir ilustra como sub-solicitações sucessivas podem ser encadeadas em uma única sequência de código sem usar retornos de chamada.

Sub-requisições separadas

Sub-solicitações são assíncronas e, anteriormente, elas tinham que ser invocadas a partir de uma diretiva js_content . Agora, sub-solicitações também podem ser acionadas a partir de uma diretiva js_set durante a avaliação de variáveis. Essas sub-solicitações “desanexadas” ainda funcionam de forma assíncrona, mas não retornam nenhum dado para a função de chamada, e qualquer resposta é ignorada.

O código de exemplo a seguir usa sub-solicitações desanexadas para enviar uma cópia dos cabeçalhos de solicitação para um sistema de gerenciamento de eventos e informações de segurança ( SIEM ) se a quantidade total de dados trocados exceder 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 NGINX JavaScript – a seção Configuração de exemplo mostra a sintaxe correta para a configuração do NGINX e arquivos JavaScript.]

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

Sistema de arquivos

O objeto fs do sistema de arquivos JavaScript foi aprimorado para oferecer suporte a promessas de 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 executando o NGINX Plus, recomendamos fortemente que atualize para o NGINX Plus R21 o mais rápido possível. Você também receberá uma série de correções e melhorias adicionais, e isso ajudará o NGINX a ajudar você quando precisar abrir um tíquete de suporte.

Revise cuidadosamente os novos recursos e mudanças de comportamento descritos nesta postagem do blog antes de prosseguir com a atualização.

Se você ainda não experimentou o NGINX Plus, recomendamos que experimente – para segurança, balanceamento de carga e gateway de API, ou como um servidor web totalmente suportado com APIs aprimoradas de monitoramento e gerenciamento. Você pode começar hoje mesmo com um teste gratuito de 30 dias . Veja você mesmo como o NGINX Plus pode ajudar você a entregar e dimensionar seus aplicativos.


"Esta postagem do blog pode fazer referência a produtos que não estão mais disponíveis e/ou não têm mais suporte. Para obter as informações mais atualizadas sobre os produtos e soluções F5 NGINX disponíveis, explore nossa família de produtos NGINX . O NGINX agora faz parte do F5. Todos os links anteriores do NGINX.com redirecionarão para conteúdo semelhante do NGINX no F5.com."