Anunciando o NGINX Plus R30

NGINX | 15 de agosto de 2023

Temos o prazer de anunciar a disponibilidade do NGINX Plus Release 30 (R30). Baseado no NGINX Open Source, o NGINX Plus é a única solução de software completa 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 R30 incluem:

  • Suporte nativo a QUIC+HTTP/3 – O NGINX Plus agora oferece suporte oficial a HTTP/3. A implementação não depende de bibliotecas de terceiros para fornecer a funcionalidade TLS ausente no OpenSSL, necessária para oferecer suporte a HTTP/3 pelo protocolo QUIC. Ela usa uma camada de compatibilidade com o OpenSSL desenvolvida pela equipe do NGINX para contornar os desafios relacionados às interfaces TLS do QUIC que não são compatíveis com o OpenSSL.
  • Telemetria de conexões por worker – Agora há suporte ao monitoramento de conexões no nível de cada worker. Isso permite que os usuários ajustem o desempenho do NGINX regulando o número de processos worker e distribuindo as conexões entre eles de forma eficiente para obter o desempenho ideal.
  • Pacote de diagnóstico – O pacote de diagnóstico do NGINX reúne todos os dados necessários para solucionar problemas em um único arquivo compactado. Isso melhora a comunicação entre os usuários do NGINX Plus e o Suporte da F5, aumentando a eficiência e reduzindo o tempo necessário para a resolução de problemas.

Completando a versão estão 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 fazendo upgrade de uma versão diferente do NGINX Plus R29, 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 da diretiva listen … http2 directive

A diretiva listen … http2 foi descontinuada no NGINX 1.25.1. A verificação da configuração do NGINX usando nginx -t exibe um aviso sobre isso.

nginx -t

nginx: [warn] the "listen ... http2" directive is deprecated, use the "http2" directive instead in etc/nginx/nginx.conf :15

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

Recomenda-se enfaticamente que todos os usuários atuais dessa diretiva atualizem o NGINX e usem a diretiva http2, que habilita o HTTP/2 individualmente em cada servidor.

Altere isto:

listen 443 ssl http2;

Para isto:

listen 443 ssl;
http2 on;

Indisponibilidade do módulo GeoIP2 no Amazon Linux 2

As versões anteriores do NGINX Plus usavam a biblioteca “libmaxminddb” do repositório EPEL do Amazon Linux 2 para compilar o módulo GeoIP2. O repositório EPEL não fornece mais essa biblioteca, e ela também não está disponível nativamente na distribuição Amazon Linux 2. Portanto, o módulo não está mais disponível no NGINX Plus R30, pois não há uma maneira viável de compilá-lo para o Amazon Linux 2.

Alterações nas diretivas MQTT

A diretiva mqtt_rewrite_buffer_size, usada para especificar o tamanho do buffer para a criação de mensagens MQTT, foi substituída pela diretiva mqtt_buffers. A nova diretiva permite especificar o número de buffers que podem ser alocados por conexão, bem como o tamanho de cada buffer.

Versão atualizada da API

O número da versão da API do NGINX Plus foi atualizado de 8 para 9 para refletir a adição das métricas por worker descritas em Telemetria de conexões por worker. Os números das versões anteriores ainda funcionam, mas a saída não inclui as métricas adicionadas em versões posteriores da API.

Alterações no suporte a plataformas

Novos sistemas operacionais compatíveis:

  • Debian 12
  • Alpine 3.18

Sistemas operacionais mais antigos removidos:

  • Alpine 3.14, que chegou ao fim da vida útil (EOL) em 1º de maio de 2023
  • Ubuntu 18.04, que chegou ao fim da vida útil (EOL) em 26 de abril de 2023

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

  • Alpine 3.15, que chegará ao fim da vida útil (EOL) em novembro de 2023

Novos recursos em detalhes

Suporte nativo a QUIC+HTTP/3

O HTTP/3 sobre QUIC é um recurso muito aguardado e solicitado por muitos de nossos clientes corporativos, e temos o prazer de apresentá-lo oficialmente no NGINX Plus R30. Trata-se de uma nova tecnologia e implementação na qual continuaremos nos concentrando em versões futuras. Recomendamos que os usuários do NGINX Plus primeiro façam testes em um ambiente que não seja de produção e compartilhem conosco qualquer feedback relevante.

O NGINX Plus depende do OpenSSL para comunicação segura e funcionalidades criptográficas, utilizando as bibliotecas SSL/TLS fornecidas com os sistemas operacionais. No entanto, como as interfaces TLS do QUIC não são compatíveis com o OpenSSL no momento desta versão, são necessárias bibliotecas de terceiros para fornecer as funcionalidades TLS ausentes exigidas pelo HTTP/3.

Para solucionar essa questão, a equipe do NGINX desenvolveu uma Camada de Compatibilidade com OpenSSL, eliminando a necessidade de compilar e distribuir bibliotecas TLS de terceiros, como quictls, BoringSSL e LibreSSL. Isso ajuda a gerenciar a experiência completa de QUIC+HTTP/3 no NGINX sem o ônus de uma implementação TLS personalizada nem a dependência de cronogramas e planos de desenvolvimento de bibliotecas de terceiros. Planejamos aprimorar a Camada de Compatibilidade com OpenSSL em versões futuras, adicionando mais recursos e opções, como suporte a 0-RTT.

Veja a configuração do QUIC+HTTP/3:

http {
        log_format quic '$remote_addr - $remote_user [$time_local] '
                        '"$request" $status $body_bytes_sent '
                        '"$http_referer" "$http_user_agent" "$http3"';
        access_log logs/access.log quic;

        server {
              # for better compatibility it's recommended
              # to use the same port for quic and https
              listen 8443 quic reuseport;
              listen 8443 ssl;

              ssl_certificate     certs/example.com.crt;
              ssl_certificate_key certs/example.com.key;

              location / {
                  # required for browsers to direct them into quic port
                  add_header Alt-Svc 'h3=":8443"; ma=86400';
              }
          }
      }

O suporte a QUIC+HTTP/3 no NGINX Plus R30 está disponível em um único binário, ao contrário do suporte experimental a HTTP/3 introduzido no NGINX Plus R29, que tinha um binário separado para o nginx quic. Essa melhoria facilita a implantação da funcionalidade em seu ambiente.

Observação: com o NGINX Plus R30, estamos encerrando o suporte e as atualizações para o binário QUIC independente e planejamos removê-lo como opção de download ainda este ano.

Telemetria de conexões por worker

Os usuários do NGINX Plus agora podem monitorar o total de conexões por processo de worker para ajustar adequadamente a diretiva worker_connections. Essa melhoria oferece aos usuários maior visibilidade sobre como as conexões são distribuídas entre os workers. A possibilidade de ajustar as conexões dos workers também ajuda a avaliar melhor sua implantação do NGINX.

As métricas de conexão por worker estão disponíveis por meio da API REST. Para recuperar essas métricas, use o endpoint …/api/9/workers.

Para recuperar as métricas de conexão de um worker específico, use o endpoint .../api/9/workers/<worker id> . O worker id usa um índice baseado em 0.

Veja um exemplo de resposta:

{
      {
          "id": 0,
          "pid": 2346,
          "connections": {
              "accepted": 1,
              "dropped": 0,
              "active": 1,
              "idle": 0
          },
          "http": {
              "requests": {
                  "total": 15,
                  "current": 1
              }
          }
      },
      {
          "id": 1,
          "pid": 1234,
          "connections": {
              "accepted": 3,
              "dropped": 0,
              "active": 1,
              "idle": 0
          },
          "http": {
              "requests": {
                  "total": 15,
                  "current": 1
              }
          }
      },

      ...

  }

As métricas de conexão por worker estão disponíveis no NGINX Plus Live Activity Monitoring Dashboard, conforme mostrado abaixo. Acesse uma demonstração ao vivo desse recurso em demo.nginx.com.

Painel de monitoramento de atividades em tempo real do NGINX Plus exibindo as informações abaixo sobre conexões e solicitações do NGINX Plus

O painel exibe as informações abaixo sobre as conexões e solicitações do NGINX Plus.

Conexões:

  • Conexões aceitas por worker
  • Conexões ativas por worker
  • Conexões ociosas por worker
  • Conexões descartadas por worker

Solicitações:

  • Solicitações atuais por worker
  • Total de solicitações por worker
  • Requisições/s por worker

Pacote de diagnóstico

Para reduzir o tempo de resolução de problemas, o pacote de diagnóstico simplifica o processo de coleta dos dados necessários para solucionar problemas no seu ambiente NGINX. O pacote de diagnóstico também ajuda a evitar divergências e atrasos associados à solicitação e à coleta manual das informações necessárias para solucionar problemas, tornando a interação entre os clientes do NGINX Plus e o Suporte da F5 mais eficiente.

O pacote de diagnóstico coleta:

  • Informações do NGINX – versão do NGINX Plus, configurações, informações de processos, módulos de terceiros, logs, estatísticas da API e endpoints
  • Informações do sistema – Comandos do host (ps, lsof, vmstat, etc.)
  • Informações do serviço – systemd, etc.
  • NGINX Agent – Logs e configurações (se houver)
  • NGINX App Protect – Logs e configurações (se houver)
  • Log do pacote de suporte – Log que contém uma lista de todos os arquivos coletados

Nosso objetivo ao adicionar o pacote de diagnóstico é deixar claro para os usuários quais comandos o script incluído no pacote executa e quais dados são coletados. Consulte a página NGINX Plus Diagnostic Package para obter mais informações.

Observação: A disponibilidade do pacote de diagnóstico está sendo anunciada como parte da versão atual R30 do NGINX Plus. No entanto, o pacote de diagnóstico não depende de uma versão específica. Daqui em diante, planejamos atualizá-lo com base no feedback de vocês e do Suporte da F5, com o objetivo de aprimorar o processo de coleta de dados para solução de problemas.

Outras melhorias no NGINX Plus R30

Otimizações de MQTT

Com as melhorias no consumo de memória implementadas no módulo de filtro do Message Queuing Telemetry Transport (MQTT), a taxa de transferência agora é de 4 a 5 vezes maior.

A diretiva mqtt_rewrite_buffer_size foi removida. Em seu lugar, foi introduzida a nova diretiva mqtt_buffers <num> <size> para especificar quantos buffers o módulo pode alocar por conexão, bem como o tamanho de cada buffer. O número padrão de buffers é 100, e o tamanho padrão de cada buffer é 1024 bytes, o que resulta no valor padrão mqtt_buffers <100> <1024> para a variável.

Otimizações de recarregamento de DNS

O NGINX Plus agora preserva os tempos de expiração dos nomes DNS de hosts upstream resolvidos dinamicamente entre recarregamentos, eliminando a necessidade de uma nova resolução ao recarregar a configuração. Antes desta atualização, as resoluções DNS eram acionadas para todos os upstreams. Com esta atualização, o NGINX preserva as resoluções DNS e os tempos de expiração de todos os upstreams e, durante o recarregamento, aciona resoluções DNS apenas para upstreams novos ou alterados.

Essa otimização terá maior impacto em ambientes NGINX que contenham um grande número de hosts upstream. Se houver 100 ou mais hosts upstream na configuração do NGINX, os benefícios das otimizações serão mais evidentes.

Alterações herdadas do NGINX Open Source

O NGINX Plus R30 é baseado no NGINX Open Source 1.25.1 e herda alterações funcionais, recursos e correções de bugs implementados desde o lançamento do NGINX Plus R29 (no NGINX 1.25.0 e 1.25.1).

Alterações

  • O suporte ao server push do HTTP/2 foi removido. O server_push teve pouca adoção e só podia ser usado em casos de uso muito limitados. (De acordo com a documentação de referência do IETF 102, ele foi usado em apenas 0,04% das sessões. Segundo a RFC 913, era “difícil de usar de forma eficaz”.) O server push do HTTP/2 foi desativado no Chrome na versão 106. Como parte dessa alteração, as diretivas http2_push, http2_push_preload e http2_max_concurrent_pushes se tornaram obsoletas.
  • A diretiva obsoleta ssl não é mais compatível. A diretiva ssl foi descontinuada no NGINX 1.15.0 e substituída pelo parâmetro ssl da diretiva listen. A diretiva ssl obsoleta foi removida.
  • Conforme mencionado acima, a diretiva listen … http2 foi descontinuada. Recomenda-se que os usuários utilizem a diretiva http2 em seu lugar.
    • Para conexões SSL com OpenSSL v1.0.2h ou superior, se o protocolo HTTP/2 estiver habilitado no servidor virtual escolhido por meio da Indicação de Nome do Servidor (SNI), ele será selecionado automaticamente pelo callback da Negociação de Protocolo da Camada de Aplicação (ALPN).
    • Para versões mais antigas do OpenSSL, o protocolo HTTP/2 é habilitado com base na configuração padrão do servidor virtual.
    • Para conexões TCP simples, o HTTP/2 agora é detectado automaticamente pelo prefácio do HTTP/2, caso esteja habilitado no servidor virtual padrão. Se o prefácio não corresponder, presume-se o uso de HTTP/0.9-1.1.
  • Foi adicionado suporte a HTTP/2 sobre TCP sem criptografia (h2c) e HTTP/1.1 no mesmo soquete de escuta. Na implementação existente, se um usuário configurar um soquete de escuta h2c (por exemplo, listen port_num http2), somente conexões HTTP/2 poderão ser criadas. Um soquete de escuta h2 oferece suporte a HTTP/1.1 e HTTP/2, com negociação de protocolo via ALPN. No entanto, na implementação existente, os clientes HTTP/1.1 falham nesse soquete, impedindo o uso do HTTP Upgrade como forma de negociar o protocolo. Essa alteração permite oferecer suporte simultâneo a HTTP/1.1 e HTTP/2 em um soquete TCP sem criptografia ao usar HTTP/2.
  • Foi implementada a prevenção de um possível estouro de buffer com algumas variáveis $sent_http_*. Uma falha na lógica de avaliação das variáveis de múltiplos cabeçalhos $sent_http_ causava possíveis estouros de buffer quando determinados elementos eram removidos, mas permaneciam na lista encadeada. Esse problema ocorria quando módulos de terceiros eram usados para substituir valores de múltiplos cabeçalhos. A atualização introduz verificações de limites aprimoradas, garantindo o processamento e a avaliação mais seguros dessas variáveis.

Recursos

  • Foi adicionado suporte completo a HTTP/3. A versão principal 1.25.0 do NGINX introduziu o suporte a HTTP/3, que foi incorporado ao NGINX Plus R30. A implementação do NGINX Plus R30 apresenta as seguintes alterações em comparação com os pacotes experimentais fornecidos no NGINX Plus R29:
    • Removida a diretiva quic_mtu directive
    • Removida a diretiva parâmetro http3 de listen directive
    • Removido o suporte a QUIC do módulo stream
    • Removido o push do servidor HTTP/3
    • Corrigida a compilação da Camada de Compatibilidade do OpenSSL com o OpenSSL 3.2+

Correção de bug

  • Corrigida a falha de segmentação caso a alocação da lista de análise de uma expressão regular (regex) falhe.

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

Alterações no módulo JavaScript do NGINX

O NGINX Plus R30 incorpora alterações do módulo NGINX JavaScript (njs) versão 0.8.0.

Recursos

  • Foram introduzidas as propriedades globais do NGINX:
    ngx.build, ngx.conf_file_path, ngx.error_log_path, ngx.prefix, ngx.version, ngx.version_number, e ngx.worker_id.
  • Introduzida a diretiva js_shared_dict_zone para http e stream, que permite declarar um dicionário compartilhado entre processos de trabalho.
  • Adicionados métodos de Array em conformidade com o ES13: Array.from(), Array.prototype.toSorted(), Array.prototype.toSpliced(), Array.prototype.toReversed().
  • Adicionados métodos de TypedArray compatíveis com o ES13: %TypedArray%.prototype.toSorted(), %TypedArray%.prototype.toSpliced(), %TypedArray%.prototype.toReversed().
  • Adicionadas propriedades de CryptoKey à API WebCrypto. Estas propriedades foram adicionadas: algorithm, extractable, type, usages.

Alterações

  • Removido o tratamento especial de cabeçalhos proibidos na API Fetch introduzido na versão 0.7.10.
  • Removido r.requestBody() do módulo http, que havia sido descontinuado na versão 0.5.0. Em vez disso, deve-se usar a propriedade r.requestBuffer ou r.requestText.
  • Removido r.responseBody() do módulo http, que foi descontinuado na versão 0.5.0. Em vez disso, deve-se usar a propriedade r.responseBuffer ou r.responseText.
  • Lançamento de uma exceção em r.internalRedirect() durante a filtragem no módulo http.
  • Os métodos nativos recebem o argumento retval. Essa alteração quebra a compatibilidade com extensões C para njs, exigindo a modificação do código.
  • Os métodos obsoletos e não compatíveis de String foram removidos. Os seguintes métodos foram removidos: String.bytesFrom(), String.prototype.fromBytes(), String.prototype.fromUTF8(), String.prototype.toBytes(), String.prototype.toUTF8(), String.prototype.toString(encoding).
  • O suporte à compilação com o GNU readline foi removido.

Correções de bugs

  • Corrigido o setter de r.status ao filtrar no módulo http.
  • Corrigida a definição do cabeçalho Location no módulo http.
  • Corrigido o valor de retorno de сrypto.getRandomValues().
  • Corrigida a avaliação de nomes de propriedades computadas com expressões de função.
  • Corrigido o nome implícito de uma expressão de função declarada em arrays.
  • Corrigida a análise sintática de loops for-in.
  • Corrigido o Date.parse() com o formato ISO-8601 e o deslocamento de horário UTC.

Para obter uma lista completa de todos os recursos, alterações e correções de bugs, consulte o log de alterações 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 R30 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. Manter-se atualizado ajudará a NGINX a oferecer um suporte melhor caso você precise abrir um chamado.

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


Compartilhar

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.