Anunciando o NGINX Plus R12

NGINX | 14 de março de 2017

[Editor – Esta publicação foi atualizada para fazer referência à API do NGINX Plus, que substitui e torna obsoletos os módulos separados de configuração dinâmica e de status abordados na versão original da publicação.]

Hoje, temos o prazer de anunciar que o NGINX Plus R12 está disponível como uma atualização gratuita para todos os assinantes do NGINX Plus. O NGINX Plus é uma plataforma de software de alto desempenho para entrega de aplicações que inclui um balanceador de carga, cache de conteúdo e servidor web. O NGINX Plus R12 é uma versão importante, com novos recursos voltados para clustering, personalização e monitoramento.

Para saber mais sobre o NGINX Plus R12, assista ao nosso webinar sob demanda.

Os usuários corporativos se beneficiarão do novo recurso de clustering, que simplifica o processo de gerenciamento de clusters de servidores NGINX Plus com alta disponibilidade. Todos os usuários se beneficiarão do suporte oficial ao nginScript, uma linguagem de script leve e de alto desempenho incorporada diretamente à configuração do NGINX. As melhorias no monitoramento e na instrumentação, no armazenamento em cache e nas verificações de integridade aumentam a confiabilidade e o desempenho das aplicações.

Outros aprimoramentos oferecem autenticação por certificado de cliente para serviços TCP, a capacidade de inspecionar campos personalizados em JWTs OAuth, suporte ao formato WebP no módulo Image-Filter, além de diversas melhorias de desempenho e estabilidade.

Recomendamos que todos os assinantes atualizem imediatamente para o NGINX Plus R12 a fim de aproveitar as melhorias de desempenho, funcionalidade e confiabilidade desta versão. Antes de realizar a atualização, não deixe de consultar as mudanças de comportamento listadas na próxima seção.

Alterações de comportamento

O NGINX Plus R12 introduz algumas alterações no comportamento padrão e nos componentes internos do NGINX Plus que você precisa conhecer ao fazer a atualização:

  • Formato dos metadados do cache – O formato do cabeçalho interno de metadados do cache foi alterado. Ao atualizar para o NGINX Plus R12, o cache em disco é invalidado, e o NGINX Plus atualiza automaticamente o cache conforme necessário. As entradas antigas do cache são excluídas automaticamente.
  • Variáveis “DN” SSL – O formato das variáveis $ssl_client_s_dn e $ssl_client_i_dn foi alterado. A vírgula ( , ) agora é usada como separador de campos em vez da barra ( / ) e é escapada de acordo com as RFCs 2253 e 4514. Para continuar usando o formato X509_NAME_oneline com a barra como separador de campos, use as variáveis $ssl_client_s_dn_legacy e $ssl_client_i_dn_legacy.
  • Fila máxima de conexões – A diretiva queue instrui o NGINX Plus a enfileirar conexões para servidores upstream caso eles estejam sobrecarregados. Como consequência das otimizações de memória e desempenho na R12, a diretiva queue agora deve aparecer no bloco upstream abaixo da diretiva que especifica o algoritmo de balanceamento de carga (hash, ip_hash, least_conn ou least_time).
  • Módulos dinâmicos de terceiros – Os módulos dinâmicos desenvolvidos ou certificados pela NGINX, Inc. estão disponíveis em nosso repositório. Todos os módulos de terceiros devem ser recompilados com o NGINX Open Source versão 1.11.10 para continuarem funcionando com o NGINX Plus R12. Consulte o Guia de Administração do NGINX Plus para obter mais informações.
  • Versão final para versões de sistemas operacionais que chegaram ao fim da vida útil – A Ubuntu anunciou o fim da vida útil do Ubuntu 12.04 LTS, e a Red Hat anunciou o fim do suporte na Fase de Produção ao Red Hat Enterprise Linux 5.10+, ambos a partir de 31 de março de 2017. O NGINX Plus R12 é a última versão que incluirá pacotes e oferecerá suporte para essas versões de sistemas operacionais, bem como para o CentOS 5.10+ e o Oracle Linux 5.10+. Para continuar recebendo atualizações e suporte após o NGINX Plus R12, atualize para uma versão de sistema operacional compatível.

Recursos do NGINX Plus R12 em detalhes

Compartilhamento de configurações

Os servidores NGINX Plus geralmente são implantados em um cluster de duas ou mais instâncias para garantir alta disponibilidade e escalabilidade. Isso permite aumentar a confiabilidade dos seus serviços, protegendo-os contra o impacto de falhas de servidor, além de expandir horizontalmente a capacidade para lidar com grandes volumes de tráfego.

O NGINX Plus já oferece uma maneira compatível de distribuir o tráfego entre os servidores de um cluster no modo ativo-passivo ou ativo-ativo. O NGINX Plus R12 adiciona outro método compatível para sincronizar a configuração em um cluster. Esse recurso de sincronização de configuração permite que um administrador configure um “cluster” de servidores NGINX Plus a partir de um único local. Esses servidores compartilham um subconjunto comum de suas configurações.

A configuração do NGINX Plus é enviada do servidor primário para os pares

Veja como sincronizar a configuração:

  1. Designe um ou mais nós “primários” no cluster.
  2. Instale o novo pacote nginx-sync nos nós primários.
  3. Aplique as alterações de configuração a um nó primário.
  4. Invoque o processo de sincronização de configuração, nginx-sync.sh, incluído no pacote nginx-sync, para atualizar cada um dos outros servidores do cluster (os pares). O processo de sincronização executa estas etapas em cada par:
    1. Envia a configuração atualizada para o par por meio de ssh ou rsync.
    2. Verifica se a configuração é válida para o par e, caso não seja, a reverte.
    3. Aplica a configuração se ela for válida e recarrega os servidores NGINX Plus no par.

Esse recurso é especialmente útil quando o NGINX Plus é implantado em um par de servidores tolerante a falhas (ou em um número maior de servidores). Você pode usar esse método para simplificar a implantação confiável de configurações em um cluster ou para enviar configurações de um servidor de homologação para um cluster de servidores de produção.

Para obter instruções detalhadas, consulte o Guia de Administração do NGINX Plus.

Disponibilidade geral do módulo JavaScript do NGINX

Com o NGINX Plus R12, temos o prazer de anunciar que o módulo NGINX JavaScript agora está disponível para uso geral como um módulo estável tanto para o NGINX Open Source quanto para o NGINX Plus. [Anteriormente, o módulo era chamado de nginScript, e esta publicação usa os dois nomes de forma intercambiável.] O nginScript conta com suporte completo para assinantes do NGINX Plus.

O nginScript é uma implementação exclusiva de JavaScript<.htmla> para o NGINX e o NGINX Plus, desenvolvida especificamente para casos de uso no lado do servidor e processamento por solicitação. Ele permite estender a sintaxe de configuração do NGINX Plus com código JavaScript para implementar soluções de configuração sofisticadas.

Com o nginScript, você pode registrar variáveis personalizadas usando lógica complexa, controlar a seleção de servidores upstream, implementar algoritmos de balanceamento de carga, personalizar a persistência de sessão e até mesmo implementar serviços web simples. Nas próximas semanas, publicaremos em nosso blog instruções completas para algumas dessas soluções e adicionaremos links para elas aqui à medida que forem disponibilizadas.

Especificamente, o NGINX Plus R12 inclui os seguintes aprimoramentos:

  • Fase de pré-leitura no módulo Stream
  • Métodos e constantes de Math do ECMAScript 6
  • Métodos adicionais de String, como endsWith, includes, repeat, startsWith e trim
  • Escopos

Embora o nginScript seja estável, o trabalho continua para oferecer suporte a ainda mais casos de uso e ampliar a cobertura da linguagem JavaScript. Saiba mais em Aproveitando o poder e a praticidade do JavaScript em cada solicitação com o módulo JavaScript do NGINX<.htmla> em nosso blog.

Novas estatísticas

O monitoramento e a instrumentação do NGINX Plus são diferenciais importantes que oferecem uma visão detalhada do desempenho e do comportamento tanto do NGINX Plus quanto das aplicações upstream. As estatísticas são disponibilizadas por meio do nosso painel gráfico integrado e também no formato JSON, que pode ser exportado para sua ferramenta de monitoramento preferida.

O painel de monitoramento de atividades em tempo real foi atualizado para o NGINX Plus R12

O NGINX Plus R12 traz várias melhorias: mais informações sobre o desempenho (tempo de resposta) dos servidores com balanceamento de carga, insights sobre a operação dos serviços TCP e UDP e diversos dados internos que ajudam na solução de problemas, permitindo identificar falhas e ajustar o NGINX Plus para otimizar o desempenho.

As novas estatísticas do NGINX Plus R12 incluem:

  • Tempo de resposta do servidor upstream – No NGINX Plus R11 e em versões anteriores, o tempo de resposta dos servidores upstream era calculado somente quando o algoritmo de balanceamento de carga Least Time era usado. A partir do NGINX Plus R12, o tempo de resposta é medido para todos os algoritmos e informado tanto nos dados JSON quanto no painel integrado.
  • Códigos de resposta para upstreams TCP/UDP no painel gráfico – O módulo Stream para balanceamento de carga TCP/UDP gera pseudocódigos de status para identificar como uma conexão foi encerrada (200 significa “sucesso”, 502 significa “upstream indisponível” e assim por diante), informando-os na variável $status. O NGINX Plus R12 adiciona uma série de colunas ao painel para exibir as contagens de códigos de resposta dos servidores virtuais TCP e UDP, semelhantes às já fornecidas para servidores virtuais HTTP. Os pseudocódigos de status também podem ser registrados em logs para integração com ferramentas existentes de análise de logs.
  • Informações sobre a versão do NGINX Plus – Para ajudar na solução de problemas, os dados JSON agora informam o número da versão do NGINX Plus como nginx_build (por exemplo, nginx-plus-r12) e o número da versão do NGINX Open Source como nginx_version (por exemplo, 1.11.10). O painel exibe ambos os valores na caixa superior esquerda da guia principal.
  • Nome do host upstream – Nos dados JSON, o campo server identifica um servidor em um grupo upstream pelo endereço IP e pela porta. O novo campo name informa o primeiro parâmetro da diretiva server no bloco de configuração upstream, que pode ser um nome de domínio ou um caminho de soquete de domínio UNIX, bem como um endereço IP e uma porta. No painel, a coluna Nome, localizada mais à esquerda nas guias Upstreams e Upstreams TCP/UDP, agora exibe o valor do campo name em vez do campo server (que era exibido no NGINX Plus R11 e em versões anteriores). A nova métrica facilita a correlação dos dados JSON e do painel com seus servidores upstream quando eles são definidos usando nomes DNS, especialmente nomes que são resolvidos para vários endereços IP.
  • Utilização de zonas de memória compartilhada nos dados de status estendidos – As zonas de memória compartilhada são configuradas com um tamanho fixo, e pode ser difícil escolher um tamanho que não seja nem grande demais (a memória é alocada, mas nunca utilizada) nem pequeno demais (a memória se esgota e os itens armazenados em cache são descartados). A nova instrumentação das métricas fornece um relatório interno detalhado sobre o uso de memória de cada zona compartilhada, permitindo que você monitore esse uso e que o suporte técnico da NGINX ofereça orientações mais fundamentadas para otimizar a configuração do NGINX.
  • Escape compatível com JSON no log de acesso do NGINX Plus – Algumas ferramentas modernas de análise de logs podem processar com eficiência arquivos de log formatados em JSON e extrair informações deles com mais facilidade do que de arquivos de log não formatados. Você pode definir um modelo JSON na diretiva padrão log_format do NGINX Plus, e o novo parâmetro opcional escape dessa diretiva aplica o escape compatível com JSON para que as linhas do log sejam formatadas corretamente.

Para obter mais informações, consulte Monitoramento de atividades em tempo real.

Cache aprimorado

O NGINX Plus R12 aprimora significativamente o mecanismo de cache do NGINX Plus.

Servir conteúdo desatualizado durante a atualização

O NGINX Plus R12 adiciona suporte às extensões de Cache-Control definidas na RFC 5861: stale-while-revalidate e stale-if-error. Agora, você pode configurar o NGINX Plus para respeitar essas extensões de Cache-Control e continuar fornecendo recursos expirados do cache enquanto os atualiza em segundo plano, sem aumentar a latência da solicitação do cliente. Da mesma forma, o NGINX Plus pode fornecer recursos expirados do cache se o servidor upstream estiver indisponível — uma técnica para implementar padrões de circuit breaker em aplicações de microsserviços.

A menos que esteja configurado para ignorar o cabeçalho Cache-Control, o NGINX Plus respeita os temporizadores de stale dos servidores de origem que retornam cabeçalhos Cache-Control em conformidade com a RFC 5861, como neste exemplo:

Cache-Control: max-age=3600 stale-while-revalidate=120 stale-if-error=900

Para habilitar o suporte às extensões de Cache-Control com atualização em segundo plano, inclua as diretivas destacadas:

proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;

server {
    # ...
    location / {
        proxy_cache my_cache;

        # Serve stale content when updating
        proxy_cache_use_stale updating;
        
        # In addition, don’t block the first request that triggers the update
        # and do the update in the background
        proxy_cache_background_update on;

        proxy_pass http://my_upstream;
    }
}

A diretiva proxy_cache_use_stale updating instrui o NGINX Plus a fornecer a versão desatualizada do conteúdo enquanto ele está sendo atualizado. Se você incluir apenas essa diretiva, o primeiro usuário a solicitar o conteúdo desatualizado sofrerá a penalidade de uma “falha de cache” – ou seja, não receberá o conteúdo até que o NGINX Plus o obtenha do servidor de origem e o armazene em cache. Os usuários que solicitarem posteriormente o conteúdo desatualizado enquanto ele estiver sendo atualizado o receberão imediatamente do cache, enquanto o primeiro usuário não receberá nada até que o conteúdo atualizado seja obtido e armazenado em cache.

Com a nova diretiva proxy_cache_background_update, todos os usuários, inclusive o primeiro, recebem o conteúdo desatualizado enquanto o NGINX Plus o atualiza em segundo plano.

A nova funcionalidade também está disponível nos módulos FastCGI, SCGI e uwsgi.

Solicitações de intervalos de bytes

Um aprimoramento adicional no mecanismo de cache permite que o NGINX Plus ignore o cache para solicitações de intervalos de bytes que começam após um número configurado de bytes a partir do início de um arquivo que não está no cache. Isso significa que, para arquivos grandes, como conteúdo de vídeo, as solicitações de um intervalo de bytes localizado em uma parte avançada do arquivo não aumentam a latência da solicitação do cliente. Em versões anteriores do NGINX Plus, o cliente só recebia o intervalo de bytes solicitado depois que o NGINX Plus buscava todo o conteúdo desde o início do arquivo até o intervalo de bytes solicitado e o gravava no cache.

A nova diretiva proxy_cache_max_range_offset especifica o deslocamento a partir do início do arquivo após o qual o NGINX Plus encaminha uma solicitação de intervalo de bytes diretamente ao servidor de origem e não armazena a resposta em cache. (A nova funcionalidade também está disponível nos módulos FastCGI, SCGI e uwsgi.)

proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
server {
    location / {
        proxy_cache my_cache;

        # Bypass cache for byte range requests beyond 10 megabytes
        proxy_cache_max_range_offset 10m;

        proxy_pass http://my_upstream;
    }
}

Essas melhorias consolidam ainda mais o NGINX Plus como um mecanismo de cache de alto desempenho e em conformidade com os padrões, adequado para qualquer ambiente, desde a aceleração da entrega de aplicações até a criação de redes de entrega de conteúdo (CDNs) completas.

Verificações de integridade aprimoradas

O NGINX Plus R12 aprimora ainda mais os recursos de verificação ativa de integridade do NGINX Plus.

Verificação de integridade em servidores recém-adicionados

Com a crescente adoção de ambientes conteinerizados e grupos de aplicações com escalonamento automático, é essencial que o balanceador de carga implemente verificações proativas da integridade no nível da aplicação e dê aos novos servidores tempo para inicializar os recursos internos antes de atingirem seu desempenho ideal.

Antes do NGINX Plus R12, quando você adicionava um novo servidor ao pool de balanceamento de carga (usando a API do NGINX Plus ou o DNS), o NGINX Plus o considerava íntegro de imediato e começava a enviar tráfego para ele imediatamente. Ao incluir o novo parâmetro mandatory na diretiva health_check (HTTP ou TCP/UDP), o novo servidor precisa passar pela verificação de integridade configurada antes que o NGINX Plus envie tráfego para ele. Quando combinado com o recurso slow‑start, o novo parâmetro dá aos novos servidores ainda mais tempo para se conectarem aos bancos de dados e “aquecerem” antes de começarem a processar sua parcela total do tráfego.

upstream my_upstream {     zone my_upstream 64k;
     server backend1.example.com slow_start=30s;
}

server {
    location / {
        proxy_pass http://my_upstream;
  
        # Require new server to pass health check before receiving traffic
        health_check mandatory;
    }
}

Aqui, estão incluídos tanto o parâmetro mandatory da diretiva health_check quanto o parâmetro slow_start da diretiva server (HTTP ou TCP/UDP). Os servidores adicionados ao grupo upstream por meio das interfaces de API ou DNS são marcados como não íntegros e não recebem tráfego até serem aprovados na verificação de integridade; a partir desse momento, passam a receber uma quantidade de tráfego que aumenta gradualmente ao longo de 30 segundos.

Verificação de integridade UDP sem configuração

É igualmente importante implementar verificações de integridade no nível da aplicação para servidores UDP, assim como para servidores HTTP e TCP, para que o tráfego de produção não seja enviado a servidores que não estejam totalmente funcionais. O NGINX Plus oferece suporte a verificações de integridade ativas para UDP, mas, antes do NGINX Plus R12, era necessário criar um bloco match que definisse os dados a serem send e a resposta a ser expect. Pode ser difícil determinar os valores adequados ao usar protocolos binários ou protocolos com handshakes complexos. Para essas aplicações, o NGINX Plus R12 agora oferece uma verificação de integridade de “configuração zero” para UDP, que testa a disponibilidade da aplicação sem exigir a definição de strings de envio e de resposta esperada. Adicione o parâmetro udp à diretiva health_check para realizar uma verificação de integridade UDP básica.

upstream udp_app {    server backend1.example.com:1234;
    server backend2.example.com:1234;
}

server {
    listen 1234 udp;
    proxy_pass udp_app;

    # Basic UDP health check
    health_check udp;
}

Atualizações de SSL – Certificados de cliente para serviços TCP, variáveis atualizadas

Os certificados de cliente SSL são comumente usados para autenticar usuários em sites protegidos. O NGINX Plus R12 adiciona suporte à autenticação para serviços TCP protegidos por SSL ao suporte a HTTP já existente. Normalmente, isso é usado para autenticação entre máquinas, em vez de login de usuários finais, e permite usar o NGINX Plus tanto para terminação SSL quanto para autenticação de clientes ao fazer o balanceamento de carga de protocolos da Camada 4. Alguns exemplos incluem a autenticação de dispositivos IoT para comunicação com o protocolo MQTT.

A variável $ssl_client_verify agora inclui informações adicionais sobre eventos de falha na autenticação do cliente. Isso inclui motivos como certificados “revogados” e “expirados”.

O formato das variáveis $ssl_client_i_dn e $ssl_client_s_dn foi alterado para estar em conformidade com as RFCs 2253 e 4514. Para obter mais detalhes, consulte Alterações de comportamento.

Validação aprimorada de JWT

O NGINX Plus R10 introduziu suporte nativo a JSON Web Token (JWT) para casos de uso de OAuth 2.0 e OpenID Connect. Um dos principais casos de uso é permitir que o NGINX Plus valide um JWT, inspecione seus campos e os encaminhe ao aplicativo de backend como cabeçalhos HTTP. Isso permite que os aplicativos participem facilmente de um ambiente de logon único (SSO) com OAuth 2.0, transferindo a validação do token para o NGINX Plus e obtendo a identidade do usuário por meio da leitura dos cabeçalhos HTTP.

O NGINX Plus R10 e versões posteriores podem inspecionar os campos definidos na especificação JWT. O NGINX Plus R12 amplia o suporte a JWT para que qualquer campo de um JWT (incluindo campos personalizados) possa ser acessado como uma variável do NGINX e, portanto, encaminhado por proxy, registrado em log ou usado para tomar decisões de autorização.

Atualize ou experimente o NGINX Plus

Se você estiver usando o NGINX Plus, recomendamos enfaticamente que faça a atualização para a versão 12 o mais rápido possível. Você terá acesso a diversas correções e melhorias, além de facilitar nosso atendimento caso precise abrir um chamado de suporte. As instruções de instalação e atualização estão disponíveis no portal do cliente.

Consulte as alterações de comportamento descritas acima antes de prosseguir com a atualização.

Se você ainda não experimentou o NGINX Plus, recomendamos que o teste para aceleração da Web, balanceamento de carga e entrega de aplicações, ou como um servidor Web com suporte completo e uma API para aprimorar o monitoramento e o gerenciamento de configurações. Você pode começar gratuitamente hoje mesmo com uma avaliação de 30 dias e conferir como o NGINX Plus pode ajudar você a disponibilizar e escalar suas aplicações.


Compartilhar

Sobre o autor

Owen Garrett
Owen GarrettDiretor Sênior de Gestão de Produtos

Mais publicações de Owen Garrett

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.