BLOG | NGINX

Anunciando o NGINX Plus R30

NGINX-Parte-de-F5-horiz-preto-tipo-RGB
Miniatura de Prabhat Dixit
Prabhat Dixit
Publicado em 15 de agosto de 2023

Temos o prazer de anunciar a disponibilidade do NGINX Plus Release 30 (R30). Baseado no NGINX Open Source, o NGINXPlus é o único software tudo-em-um de 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 para QUIC+HTTP/3 NGINX Plus agora tem suporte oficial para HTTP/3. A implementação não depende de bibliotecas de terceiros para fornecer a funcionalidade OpenSSL TLS ausente, necessária para fornecer suporte HTTP/3 pelo protocolo QUIC. Ele usa uma camada de compatibilidade OpenSSL desenvolvida pela equipe NGINX para contornar os desafios com interfaces QUIC TLS que não são suportadas pelo OpenSSL.
  • Telemetria de conexão por trabalhador O monitoramento de conexões em nível de trabalhador agora é suportado. Isso permite que os usuários ajustem o desempenho do NGINX regulando o número de processos de trabalho e distribuindo efetivamente as conexões entre os trabalhos para um desempenho ideal.
  • Pacote de diagnóstico O pacote de diagnóstico NGINX coleta 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 F5, aumentando a eficiência e reduzindo o tempo de resposta para resolução de problemas.

Completando o lançamento, estão novos recursos e correções de bugs herdados do NGINX Open Source e atualizações do módulo JavaScript do NGINX.

Mudanças importantes no comportamento

Observação : Se você estiver atualizando de uma versão diferente do NGINX Plus R29, não deixe de conferir a seção Alterações importantes no comportamento em blogs de anúncios anteriores para todas as versões entre sua versão atual e esta.

Descontinuação da diretiva listen … http2

A diretiva listen … http2 foi descontinuada no NGINX 1.25.1. A verificação de configuração do NGINX usando nginx -t emite um aviso sobre esse efeito.  

nginx -t

nginx: [aviso] a diretiva "listen ... http2" está obsoleta, use a diretiva "http2" em vez disso em etc/nginx/nginx.conf :15

nginx: a sintaxe do arquivo de configuração /etc/nginx/nginx.conf está ok

nginx: o teste do arquivo de configuração /etc/nginx/nginx.conf foi bem-sucedido

Todos os usuários existentes desta diretiva são fortemente aconselhados a atualizar o NGINX e usar a diretiva http2, que habilita o HTTP/2 por servidor.

Alterar isto:

ouvir 443 ssl http2;

Para isso:

ouvir 443 ssl;
http2 em;

Indisponibilidade do módulo GeoIP2 no Amazon Linux 2

Versões anteriores do NGINX Plus usavam a biblioteca “libmaxminddb” do repositório Amazon Linux 2 EPEL para construir o módulo GeoIP2 . O repositório EPEL não fornece mais esta biblioteca, nem ela é acessí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 criá-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 construir 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, além de especificar o tamanho de cada buffer.

Versão da API atualizada

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

Mudanças no suporte da plataforma

Novos sistemas operacionais suportados:

  • Debian 12
  • Alpino 3.18

Sistemas operacionais mais antigos removidos:

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

Sistemas operacionais mais antigos foram descontinuados e programados para remoção no NGINX Plus R31:

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

Novos recursos em detalhes

Suporte nativo para QUIC+HTTP/3

O HTTP/3 sobre QUIC era um recurso muito aguardado e solicitado por muitos de nossos clientes empresariais, e estamos felizes em apresentá-lo oficialmente no NGINX Plus R30. Esta é uma nova tecnologia e implementação na qual continuaremos a nos concentrar em versões futuras. Aconselhamos os usuários do NGINX Plus a primeiro testá-lo em um ambiente de não produção e compartilhar qualquer feedback valioso conosco.

O NGINX Plus conta com OpenSSL para comunicação segura e funcionalidade criptográfica, fazendo uso das bibliotecas SSL/TLS fornecidas com os sistemas operacionais. No entanto, como as interfaces TLS do QUIC não são suportadas pelo OpenSSL no momento deste lançamento, bibliotecas de terceiros são necessárias para fornecer a funcionalidade TLS ausente exigida pelo HTTP/3.

Para resolver essa preocupação, a equipe do NGINX desenvolveu uma Camada de Compatibilidade OpenSSL , eliminando a necessidade de criar e enviar bibliotecas TLS de terceiros, como quictls, BoringSSL e LibreSSL. Isso ajuda a gerenciar a experiência QUIC+HTTP/3 de ponta a ponta no NGINX sem o fardo de uma implementação TLS personalizada nem a dependência de cronogramas e roteiros de bibliotecas de terceiros. Planejamos aprimorar a Camada de Compatibilidade OpenSSL em versões futuras com mais recursos e opções, como suporte para 0-RTT.

Aqui está a configuração 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 {
             # para melhor compatibilidade é recomendado
            # usar a mesma porta para quic e https
            listen 8443 quic reuseport;
             listen 8443 ssl;

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

             location / {
                 # necessário para que os navegadores os direcionem para a porta quic
                add_header Alt-Svc 'h3=":8443"; ma=86400';
            }
        }
    }

O suporte QUIC+HTTP/3 no NGINX Plus R30 está disponível como um único binário – diferente do suporte experimental 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 autônomo e planejamos removê-lo como uma opção de download ainda este ano.

Telemetria de conexão por trabalhador

Os usuários do NGINX Plus agora podem monitorar o total de conexões por processo de trabalho para ajustar adequadamente a diretiva worker_connections . Essa melhoria dá aos usuários melhor visibilidade sobre como as conexões são distribuídas entre os trabalhadores. Ser capaz de ajustar as conexões dos trabalhadores também ajuda você a avaliar melhor sua implantação do NGINX.

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

Para recuperar métricas de conexão por trabalhador para um trabalhador individual, use o ponto de extremidade .../api/9/workers/< worker id > . O ID do trabalhador tem um índice de base 0.

Aqui está um exemplo de resposta:

{
      {
          "eu ia": 0,
        "pid": 2346,
        "conexões": {
             "aceito": 1,
            "caiu": 0,
            "ativo": 1,
            "ocioso": 0
        },
         "http": {
             "solicitações": {
                 "total": 15,
                "atual": 1
             }
       }
    },
    {
        "identidade": 1,
        "pid": 1234,
        "conexões": {
             "aceito": 3,
            "caiu": 0,
            "ativo": 1,
            "ocioso": 0
        },
         "http": {
             "solicitações": {
                 "total": 15,
                "atual": 1             }         }     },     ... }

As métricas de conexão por trabalhador estão disponíveis no Painel de monitoramento de atividades ao vivo do NGINX Plus , conforme mostrado abaixo. Acesse uma demonstração ao vivo deste recurso em demo.nginx.com.

Painel de monitoramento de atividades ao vivo do NGINX Plus mostrando as informações abaixo sobre conexões e solicitações do NGINX Plus

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

Conexões:

  • Conexões aceitas por trabalhador
  • Conexões ativas por trabalhador
  • Conexões ociosas por trabalhador
  • Conexões perdidas por trabalhador

Pedidos:

  • Solicitações atuais por trabalhador
  • Total de solicitações por trabalhador
  • Solicitações/seg por trabalhador

Pacote de Diagnóstico

Para reduzir o tempo de resposta para resolução de problemas, o pacote de diagnóstico simplifica o processo de coleta de dados necessários para solucionar problemas no seu ambiente NGINX. O pacote de diagnóstico também ajuda a evitar discrepâncias e atrasos associados à solicitação e coleta manual de 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 do processo, módulos de terceiros, logs e estatísticas e endpoints da API
  • Informações do sistema – Comandos do host ( ps , lsof , vmstat , etc.)
  • Informações de serviçosystemd , etc.
  • Agente NGINX – Logs e configurações (se houver)
  • NGINX App Protect – Logs e configurações (se houver)
  • Log do pacote de suporte – Log contendo uma lista de todos os arquivos coletados

Nosso objetivo com a adição do pacote de diagnóstico é ser transparente com os usuários sobre quais comandos o script dentro do pacote executa e quais dados estão sendo coletados. Consulte a página do Pacote de diagnóstico NGINX Plus para obter mais informações.

Observação: A disponibilidade do pacote de diagnóstico está sendo anunciada como parte da versão atual do NGINX Plus R30, no entanto, o pacote de diagnóstico não depende realmente da versão. No futuro, planejamos atualizá-lo com base no feedback de vocês e do Suporte F5 com a intenção de melhorar o processo de coleta de dados de solução de problemas.

Outras melhorias no NGINX Plus R30

Otimizações MQTT

Com as melhorias no consumo de memória feitas no módulo de filtro Message Queuing Telemetry Transport (MQTT), agora há um aumento de 4 a 5 vezes na taxa de transferência.

A diretiva mqtt_rewrite_buffer_size foi removida. Em vez disso, a nova directiva mqtt_buffers <num> <tamanho> foi introduzido para especificar quantos buffers o módulo pode alocar por conexão, juntamente com 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 torna o valor padrão da variável mqtt_buffers <100> <1024> .

Otimizações de recarga de DNS

O NGINX Plus agora preserva os tempos de expiração de nomes DNS para hosts upstream resolvidos dinamicamente em todas as recargas, eliminando a necessidade de nova resolução na recarga de configuração. Antes desta atualização, as resoluções de DNS eram acionadas para todos os upstreams. Com esta atualização, o NGINX preserva as resoluções de DNS e os tempos de expiração para todos os upstreams e aciona resoluções de DNS apenas para upstreams novos ou alterados na recarga.

Essa otimização terá maior impacto em ambientes NGINX que contenham um grande número de hosts upstream. Se você tiver 100 ou mais hosts upstream na sua configuração NGINX, as 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 feitos desde o lançamento do NGINX Plus R29 (no NGINX 1.25.0 e 1.25.1).

Mudanças

  • O suporte a push do servidor HTTP/2 foi removido. O HTTP/2 server_push teve adoção mínima e só pôde 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. De acordo com o RFC 913, era “difícil de ser usado efetivamente”. O push do servidor HTTP/2 foi desabilitado na versão 106 do Chrome . Como parte dessa mudança, as diretivas http2_push , http2_push_preload e http2_max_concurrent_pushes se tornaram obsoletas.
  • A diretiva ssl obsoleta não é mais suportada. 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 está obsoleta. Os usuários são aconselhados a usar a diretiva http2 .
    • Para conexões SSL com OpenSSL v1.0.2h ou superior, se o protocolo HTTP/2 estiver habilitado no servidor virtual escolhido por uma Identificação de Nome de Servidor (SNI), ele será selecionado automaticamente pelo retorno de chamada de 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 prefixo HTTP/2 se estiver habilitado no servidor virtual padrão. Se o prefácio não corresponder, HTTP/0.9-1.1 será assumido.
  • Foi adicionado suporte para HTTP/2 sobre Cleartext TCP (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 suporta HTTP/1.1 e HTTP/2 com negociação de protocolo via ALPN. Entretanto, na implementação existente, os clientes HTTP/1.1 falham no soquete, impedindo o uso do HTTP Upgrade como meio de negociar o protocolo. Essa alteração permite suporte simultâneo de HTTP/1.1 e HTTP/2 em um soquete TCP simples ao usar HTTP/2.
  • A prevenção de possível estouro de buffer com algum $sent_http_* está habilitada. Um defeito na lógica de avaliação de variáveis de cabeçalho múltiplo $sent_http_ levou a possíveis estouros de buffer quando certos elementos foram limpos, mas permaneceram na lista vinculada. Esse problema se manifestou quando módulos de terceiros foram usados para substituir valores de vários cabeçalhos. A atualização introduz verificações de limites refinadas, garantindo manuseio e avaliação mais seguros dessas variáveis.

Recursos

  • Suporte completo a HTTP/3 foi adicionado. A versão principal do NGINX 1.25.0 introduziu suporte para HTTP/3, e esse suporte foi mesclado ao NGINX Plus R30. A implementação do NGINX Plus R30 tem as seguintes alterações quando comparada aos pacotes experimentais entregues no NGINX Plus R29:
  •  
    • Diretiva quic_mtu removida
    • Parâmetro http3 removido da diretiva listen
    • Removido o suporte QUIC do módulo de fluxo
    • Removido push do servidor HTTP/3
    • Corrigida a construção da Camada de Compatibilidade OpenSSL com OpenSSL 3.2+

Correção de bug

  • Corrigido erro de segmentação caso uma expressão regular (regex) estude a alocação de lista que falhe.

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

Alterações no módulo JavaScript NGINX

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

Recursos

  • Introduzidas 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 .
  • Foi 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 matriz compatíveis com ES13: Matriz.from(), Matriz.prototype.toSorted(), Matriz.prototype.toSpliced(), Matriz.prototype.toReversed() .
  • Adicionados métodos TypedArray compatíveis com ES13: %TypedArray%.prototype.toSorted(), %TypedArray%.prototype.toSpliced(), %TypedArray%.prototype.toReversed() .
  • Propriedades CryptoKey adicionadas na API WebCrypto . Essas propriedades foram adicionadas: algorithm, extractable, type, usages .

Mudanças

  • Removido o tratamento especial de cabeçalhos proibidos na API Fetch introduzida em0.7.10 .
  • Removido r.requestBody() do módulo http, que foi descontinuado na versão 0.5.0. A propriedade r.requestBuffer ou r.requestText deve ser usada em seu lugar.
  • Removido r.responseBody() do módulo http, que foi descontinuado na versão 0.5.0. A propriedade r.responseBuffer ou r.responseText deve ser usada em seu lugar.
  • Lançando uma exceção em r.internalRedirect() ao filtrar no módulo http .
  • Métodos nativos são fornecidos com o argumento retval . Essa alteração quebra a compatibilidade com a extensão C para njs, exigindo a modificação do código.
  • Métodos String obsoletos e não compatíveis 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(codificação) .
  • Removido suporte para compilação com GNU readline.

Correções de bugs

  • Corrigido o parâmetro r.status setter ao filtrar no módulo http .
  • Configuração corrigida do cabeçalho de localização no módulo http .
  • Corrigido o retval de сrypto.getRandomValues() .
  • Avaliação fixa de nomes de propriedades computadas com expressões de função.
  • Nome implícito corrigido para uma expressão de função declarada em matrizes.
  • Análise fixa de loops for-in.
  • Date.parse() corrigido com formato ISO-8601 e deslocamento de tempo UTC.

Para uma lista abrangente 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 executando o NGINX Plus, recomendamos fortemente que você atualize para o NGINX Plus R30 o mais rápido possível. Além de todos os excelentes novos recursos, você também obterá diversas correções e melhorias adicionais, e estar atualizado ajudará o NGINX a ajudá-lo caso precise abrir um tíquete de suporte.

Se você ainda não experimentou o NGINX Plus, recomendamos que você o experimente. Você pode usá-lo para casos de uso de segurança, balanceamento de carga e gateway de API, ou como um servidor web totalmente suportado com APIs aprimoradas de monitoramento e gerenciamento. Comece hoje mesmo com um teste gratuito de 30 dias .


"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."