Anunciando o NGINX Plus R13

NGINX | 29 de agosto de 2017

Temos o prazer de anunciar que o NGINX Plus Release 13 (R13) já está disponível como uma atualização gratuita para todos os assinantes do NGINX Plus. O NGINX Plus combina servidor web, balanceador de carga e cache de conteúdo, sendo desenvolvido com base no NGINX Open Source. O NGINX Plus R13 inclui novos recursos voltados para implantações dinâmicas, recursos aprimorados de depuração e melhorias de segurança e desempenho.

O NGINX Plus R13 passa a oferecer suporte a:

  • Uma nova API do NGINX Plus – Realize configurações dinâmicas e obtenha métricas de status estendidas em um único endpoint consolidado; a API também adiciona suporte a armazenamentos de chave-valor.
  • Espelhamento de solicitações – Envie uma cópia de todo o tráfego de entrada para um servidor dedicado, no qual você pode monitorar, inspecionar e registrar o tráfego da aplicação sem afetar o desempenho dos servidores de produção.
  • Aprimoramentos no módulo JavaScript do NGINX – Amplie o NGINX Plus com configuração programática usando o módulo JavaScript do NGINX, nossa implementação personalizada de JavaScript. [O módulo era anteriormente chamado de nginScript.] O novo shell interativo njs fornece um console que exibe todos os objetos integrados do JavaScript. Esses objetos podem ser explorados mais detalhadamente para revelar os métodos e elementos primitivos disponíveis para cada objeto.
  • Ferramenta de compilação para módulos dinâmicos – Use nossa nova ferramenta de compilação para criar pacotes instaláveis para os diversos módulos de terceiros disponíveis para o NGINX e o NGINX Plus.

Outros aprimoramentos incluem melhorias no método sticky learn para persistência de sessão, suporte a trailers HTTP e um novo módulo dinâmico de terceiros para substituições HTTP.

Mudanças de comportamento

Recursos do NGINX R13 em detalhes

API do NGINX Plus

O NGINX Plus R13 inclui uma nova API REST unificada em um único endpoint. As versões anteriores do NGINX Plus incluíam APIs separadas para Upstream Conf e Extended Status. A nova API combina as funcionalidades de ambas e também oferece suporte ao novo módulo Key‑Value Store em diversos casos de uso de configuração dinâmica (abordados na seção Key‑Value Store abaixo).

Para habilitar a API do NGINX Plus, inclua a nova diretiva api em um bloco location:

server {    listen 80;

    location /api {
        api write=on;
        # directives that allow access only by authorized users
    }
}

Por padrão, a API do NGINX Plus fornece acesso somente leitura aos dados. Adicione o parâmetro write=on à diretiva api para habilitar o acesso de leitura e gravação, permitindo alterações nos servidores upstream e no novo módulo Armazenamento de chave-valor. Recomendamos enfaticamente restringir o acesso à API somente a usuários autorizados, especialmente quando o modo de leitura e gravação estiver habilitado.

Para ver todos os tipos de informações disponíveis no endpoint da API, execute este comando:

$ curl http://localhost:80/api/1/ ["nginx","processes","connections","ssl","slabs","http","stream"]

Para exibir detalhes sobre um tipo específico de informação, acrescente a string apropriada ao URI da solicitação:

  • connections – Exibir métricas do total de conexões
  • http – Exiba métricas do tráfego HTTP e modifique a configuração de upstream HTTP. Também há dois “subtipos” em http:
    • http/server_zones – Exibir informações sobre servidores virtuais HTTP
    • http/upstreams – Exibir informações sobre grupos de servidores upstream HTTP e modificar suas configurações
  • nginx – Exibir informações gerais sobre o NGINX
  • processes – Exibe informações sobre os processos de trabalho do NGINX
  • slabs – Exibir informações sobre a memória compartilhada alocada pelo NGINX
  • ssl – Exibe métricas de clientes SSL/TLS em tempo real
  • stream – Exibir métricas de tráfego TCP/UDP e modificar a configuração de grupos de servidores upstream TCP/UDP (em stream/upstreams)

Monitoramento de status estendido

O NGINX Plus fornece mais de 40 métricas exclusivas, além das disponíveis no NGINX Open Source. Agora você pode acessar essas métricas usando a API do NGINX Plus. Use a API para acessar as métricas mais importantes para você.

Por exemplo, acrescente connections ao URI para gerar um instantâneo do status das conexões, incluindo o número de conexões de clientes aceitas, ativas, descartadas e ociosas.

$ curl http://localhost:80/api/1/connections{"accepted":3,"dropped":0,"active":1,"idle":0}

Outro exemplo: adicione ssl ao URI para exibir um instantâneo das estatísticas dos clientes SSL em tempo real.

$ curl http://localhost:80/api/1/ssl {"handshakes":0,"handshakes_failed":0,"session_reuses":0}

Configuração dinâmica de grupos de servidores upstream

No NGINX Plus R12 e em versões anteriores, era possível usar a diretiva upstream_conf para habilitar a configuração dinâmica de grupos de servidores upstream existentes sem recarregar o NGINX Plus. Essa funcionalidade agora está incorporada à API do NGINX Plus.

Este trecho de configuração do NGINX Plus define dois servidores no grupo de upstream chamado backend, e habilita a API do NGINX Plus em /api:

upstream backend {    zone backends 64k;
    server 10.10.10.2; 
    server 10.10.10.4;
}

server {
    listen 80;
    server_name www.example.org;

    location /api {
        api write=on;
    }
}

Para adicionar um servidor ao grupo backend, inclua a opção -d em uma solicitação curl para /api/1/http/upstreams/backend/servers, com um texto JSON que defina o endereço IP do novo servidor (neste caso, 10.10.10.6). A opção -i indica que os cabeçalhos HTTP serão incluídos na resposta. (Você pode omitir -X POST, pois esse é o método padrão ao usar -d, mas nós o incluímos para manter a consistência com os outros métodos.)

$ curl -iX POST -d '{"server":"10.10.10.6"}' http://localhost/api/1/http/upstreams/backend/serversHTTP/1.1 201 Created
...

Para obter detalhes sobre todas as opções de configuração de grupos upstream, consulte a documentação de referência do módulo NGINX Plus API.

Armazenamento de chave-valor

O NGINX Plus R13 apresenta um novo módulo de armazenamento de chave-valor. Você pode usar a API do NGINX Plus para criar, modificar e remover pares de chave-valor dinamicamente em uma ou mais zonas de memória compartilhada “keyval”. O valor de cada par de chave-valor pode então ser avaliado como uma variável para uso por outros recursos do NGINX Plus.

Para adicionar, modificar, ler e excluir entradas no armazenamento de chave-valor, use os métodos HTTP POST, PATCH, GET e DELETE, respectivamente. O armazenamento de chave-valor oferece diversas soluções de configuração dinâmica para permitir a integração em tempo real com sistemas externos.

Alguns exemplos de casos de uso incluem:

  • Lista dinâmica de bloqueio de endereços IP (consulte o Guia do Administrador do NGINX Plus)
  • Roteamento de URIs para servidores de backend
  • Gerenciamento de listas de URIs permitidos por usuário
  • Gerenciamento de regras de redirecionamento (veja o exemplo a seguir)

O trecho de configuração a seguir usa o módulo Key-Value Store para gerenciar URLs personalizadas de um site.

keyval_zone zone=redirects:1M state=state/redirects.json;  # Save key-val pairs to filekeyval $uri $target zone=redirects;                        # $uri is the key, $target is the value

server {
    listen 80;

    location /api {
        api write=on; # Enable the NGINX Plus API (secure this location in production environments)
    }

    if ($target) {          # True when $uri exists in the 'redirects' keyval zone
        return 301 $target; # Redirect client to the matching value for the $uri
    }

    location / {
        proxy_pass http://backend;
    }
}

Na diretiva keyval, a chave é definida como o URI da máquina remota que emite a solicitação HTTP. Se $uri for uma chave no armazenamento de chave-valor, o valor associado à chave será atribuído a uma nova variável chamada $target. Então, se $target existir, o NGINX Plus redirecionará o cliente para o valor correspondente de $uri.

Para preencher o armazenamento de chave-valor com uma URL personalizada inicial, enviamos os dados, codificados como JSON, para o URI da API do NGINX Plus.

$ curl -iX POST -d '{"/conf":"/conf2017"}' http://localhost/api/1/http/keyvals/redirectsHTTP/1.1 201 Created
...

Agora, os clientes que solicitam /conf são redirecionados para /conf2017.

$ curl -i http://localhost/confHTTP/1.1 301 Moved Temporarily
Location: http://localhost/conf2017

Você pode usar o método PATCH para adicionar mais redirecionamentos de URLs personalizadas ao armazenamento de chave-valor e modificar dinamicamente as entradas existentes.

$ curl -iX PATCH -d '{"/conf":"/conf2018"}' http://localhost/api/1/http/keyvals/redirectsHTTP/1.1 204 No Content
...

Você pode configurar vários armazenamentos de chave-valor separados usando a diretiva keyval para definir uma zona de memória compartilhada diferente para cada um. Para obter mais informações, consulte a documentação de referência do módulo Key-Value Store.

Documentação do Swagger

A nova API do NGINX Plus inclui uma especificação Swagger que pode ser usada para explorar a API e entender os recursos de cada recurso. A documentação do Swagger está incluída no NGINX Plus e pode ser acessada em http://nginx-host/swagger-ui/.

A parte interativa da interface do Swagger requer que a API do NGINX Plus esteja habilitada, o que pode ser feito removendo o comentário do bloco de localização /api/ no arquivo conf.d/default.conf.

# enable /api/ location with appropriate access control in order# to make use of NGINX Plus API
#
#location /api/ {
#    api write=on;
#    allow 127.0.0.1;
#    deny all;
#}

Você também pode consultar a documentação da API do NGINX Plus em https://demo.nginx.com/swagger-ui/.

Observação: Toda a API do NGINX Plus, incluindo as métricas de status estendidas, a configuração de upstream e o novo módulo de armazenamento de chave-valor, é exclusiva do NGINX Plus.

Espelhamento de requisições

Com o NGINX Plus R13, você pode habilitar o espelhamento de solicitações HTTP. Com esse recurso, as solicitações HTTP encaminhadas por proxy para um grupo upstream são clonadas e também enviadas para um destino diferente. A solicitação original é processada normalmente, mas todas as respostas da solicitação clonada são ignoradas. Há muitos casos de uso para o espelhamento de solicitações, incluindo:

  • Integração com firewalls de aplicações Web (WAFs) quando implantados no modo de aprendizado, permitindo que os padrões típicos de solicitação sejam analisados sem afetar o tráfego de produção
  • Ajuste de desempenho sem riscos usando tráfego de produção em tempo real
  • Duplicação de uploads de arquivos em um servidor de backup para evitar a replicação do sistema de arquivos entre servidores web

A ativação do espelhamento de solicitações tem um impacto insignificante na vazão e no desempenho gerais do sistema. O trecho de configuração a seguir mostra como usar a nova diretiva mirror para clonar solicitações e encaminhá-las a um servidor upstream separado.

location / {    mirror /mirror;
    proxy_pass http://backend;
}

location /mirror {
    internal;
    proxy_pass http://test_backend$request_uri;
}

As solicitações são encaminhadas por proxy para o grupo de upstream backend para processamento normal. Elas também são clonadas e encaminhadas por proxy para um grupo de upstream separado chamado test_backend, mantendo o URI da solicitação original.

Observação: O espelhamento de solicitações foi lançado inicialmente no NGINX Open Source 1.13.4.

Aprimoramentos no módulo JavaScript do NGINX

Desde que se tornou disponível para o público em geral no NGINX Plus R12, o módulo JavaScript do NGINX (anteriormente chamado de nginScript) continua sendo ampliado com suporte aos principais recursos da linguagem JavaScript. Nesta versão, introduzimos suporte a números hexadecimais (como 0x7b) e à notação científica (como 512e10). Também foram implementados métodos primitivos para a classe Object.

O NGINX JavaScript agora também oferece um shell interativo, executado com o comando njs, para auxiliar no desenvolvimento de código NGINX JavaScript.

O trecho de shell a seguir mostra como acessar o shell interativo do NGINX JavaScript, definir uma expressão que gera uma data aleatória até 30 segundos no futuro e calcular a soma de dois números.

$ njsinteractive njscript
>> Date.now() + Math.round(Math.random()*30*1000);
1500976350968
>> 0x7b + 512e10;
5120000000123
>>

Para saber mais, consulte a introdução ao NGINX JavaScript<.htmla> em nosso blog.

Observação: O NGINX JavaScript está disponível tanto para o NGINX Open Source quanto para o NGINX Plus.

Ferramenta de compilação para módulos dinâmicos

O NGINX 1.11.5 e o NGINX Plus R11 introduziram suporte à compilação de módulos dinâmicos de forma independente do próprio NGINX. Isso permite que os usuários do NGINX e do NGINX Plus utilizem as compilações oficiais dos repositórios da NGINX, Inc. e carreguem apenas os módulos dinâmicos de que precisam.

Com o NGINX Plus R13, fornecemos uma ferramenta de build para compilar e empacotar um módulo dinâmico como um módulo instalável que preserva e respeita a dependência entre ele e a versão base do NGINX à qual está vinculado.

Para obter detalhes completos sobre a ferramenta de compilação, consulte Como criar pacotes instaláveis para módulos dinâmicos em nosso blog.

Observação: A ferramenta de compilação está disponível tanto para o NGINX Open Source quanto para o NGINX Plus.

Persistência de sessão sticky learn mais rápida

A persistência de sessão é um recurso muito útil do balanceamento de carga do NGINX Plus que permite encaminhar todas as solicitações de um determinado cliente para um único servidor. Há várias maneiras de estabelecer a persistência de sessão; com o método “sticky learn”, o NGINX Plus verifica a presença de um cookie específico e mantém o cliente vinculado ao mesmo servidor sempre que esse cookie é incluído em uma solicitação.

Com o NGINX Plus R13, agora você pode estabelecer uma sessão persistente assim que o servidor upstream enviar os cabeçalhos da resposta, em vez de aguardar a chegada do payload completo da resposta. Assim, o NGINX Plus pode enviar a sessão persistente ao cliente o mais rápido possível. Inclua o novo parâmetro header na diretiva sticky learn:

upstream backends {    zone backends 64k;
    server 10.10.10.2; 
    server 10.10.10.4;
   
    sticky learn create=$upstream_cookie_sessionid
                 lookup=$cookie_sessionid
                 zone=client_sessions:1m
                 header;
 }

O parâmetro header é particularmente útil se um aplicativo estiver sujeito a erros e você quiser que o cliente reenvie as solicitações com falha para o mesmo servidor upstream.

Observação: A persistência de sessão sticky‑learn é exclusiva do NGINX Plus.

Recursos adicionais

O NGINX Plus R13 apresenta os seguintes recursos adicionais:

  • Trailers HTTP – A diretiva add_trailer permite adicionar trailers arbitrários ao final das respostas HTTP. O cabeçalho de resposta Trailer permite que o remetente inclua campos adicionais ao final de mensagens fragmentadas para fornecer metadados que podem ser gerados dinamicamente durante o envio do corpo da mensagem, como uma verificação de integridade da mensagem ou uma assinatura digital.
  • Módulo dinâmico do filtro de substituições – O módulo dinâmico comunitário HTTP Substitutions Filter agora é compatível e está incluído em nossas distribuições do NGINX Plus. O módulo pode aplicar substituições por expressões regulares e por strings fixas aos corpos das respostas. Ele verifica o buffer das cadeias de saída e procura correspondências linha por linha. Você também pode acessar o módulo na página Dynamic Modules.
  • Encerramento normal dos processos de trabalho – Use a diretiva worker_shutdown_timeout para definir um tempo limite que permita concluir mais rapidamente o encerramento normal dos processos de trabalho. Quando o tempo limite expira após o recebimento de um sinal de encerramento ou reinicialização, o NGINX Plus tenta fechar todas as conexões de clientes abertas.

Atualize para a R13 ou experimente o NGINX Plus

Se você estiver usando o NGINX Plus, recomendamos enfaticamente que faça a atualização para a versão 13 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.

Antes de prosseguir com a atualização, analise cuidadosamente 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 o teste para aceleração da Web, balanceamento de carga e entrega de aplicações, ou como um servidor Web com suporte completo e APIs avançadas de monitoramento e gerenciamento. 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
Tags: Security

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.