BLOG | NGINX

Anunciando o NGINX Plus R13

NGINX-Parte-de-F5-horiz-preto-tipo-RGB
Miniatura de Liam Crilly
Liam Crilly
Publicado em 29 de agosto de 2017

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

O NGINX Plus R13 apresenta suporte para:

  • Uma nova API NGINX Plus – Execute configuração dinâmica e obtenha métricas de status estendidas em um único ponto de extremidade consolidado; a API também adiciona suporte para armazenamentos de chave-valor.
  • Solicitar espelhamento – Envie uma cópia de todo o tráfego de entrada para um servidor dedicado, onde você pode monitorar, inspecionar e registrar o tráfego do aplicativo sem afetar o desempenho dos servidores de produção.
  • Melhorias no módulo NGINX JavaScript – Estenda o NGINX Plus com configuração programática usando o módulo NGINX JavaScript, nossa implementação personalizada do JavaScript. [O módulo era anteriormente chamado de nginScript.] O novo shell interativo njs fornece um console que mostra todos os objetos internos para JavaScript. Esses objetos podem ser investigados mais detalhadamente para expor os métodos e primitivos disponíveis para cada objeto.
  • Ferramenta de construção para módulos dinâmicos – Use nossa nova ferramenta de construção para criar pacotes instaláveis para os muitos módulos de terceiros disponíveis para NGINX e NGINX Plus.

Outras melhorias incluem melhorias no método de aprendizado persistente 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 no comportamento

  • Módulos obsoletos – As APIs anteriores para status estendido e configuração dinâmica de grupos upstream (os módulos Status e Upstream Conf ) estão obsoletas e substituídas pela API unificada NGINX Plus . As APIs obsoletas continuarão a ser enviadas com o NGINX Plus por um mínimo de 6 meses, junto com a nova API NGINX Plus . As APIs obsoletas serão removidas em uma versão futura do NGINX Plus.
  • Diretiva removida – A diretiva sticky_cookie_insert foi removida no NGINX Plus R13, tendo sido descontinuada no NGINX Plus R2.
  • Módulos dinâmicos de terceiros – Os módulos dinâmicos instalados do repositório NGINX são atualizados automaticamente para R13. Quaisquer módulos de terceiros – ou seja, módulos não incluídos no repositório oficial do NGINX – devem ser recompilados com o NGINX Open Source 1.13.4 para continuar funcionando com o NGINX Plus R13. Para obter mais informações, consulte o Guia de administração do NGINX Plus .
  • Diretiva no módulo ModSecurity não é mais suportada – A diretiva SecRequestBodyInMemoryLimit para ModSecurity não é mais suportada. Os clientes podem remover esta diretiva com segurança, porque o módulo ModSecurity obedece ao tratamento do corpo da solicitação definido pela configuração do NGINX.

    [ Editor – O módulo NGINX ModSecurity WAF para NGINX Plus foi oficialmente encerrado em 1º de abril de 2022 e está em transição para o fim da vida útil em 31 de março de 2024 . Para mais detalhes, veja F5 NGINX ModSecurity WAF está em transição para o fim da vida útil<.htmla> em nosso blog.]

  • Removido o suporte para versões de fim de vida do sistema operacional – o NGINX Plus não é mais suportado no CentOS 5.10+, Red Hat Enterprise Linux 5.10+, Oracle Linux 5.10+, Ubuntu 12.04 LTS ou Ubuntu 16.10.

Recursos do NGINX R13 em detalhes

API do NGINX Plus

O NGINX Plus R13 inclui uma nova API REST unificada em um único ponto de extremidade. Versões anteriores do NGINX Plus incluíam APIs Upstream Conf e Extended Status separadas. A nova API combina a funcionalidade de ambos e também oferece suporte ao novo módulo Key-Value Store em uma variedade de casos de uso para configuração dinâmica (discutido na seção Key-Value Store abaixo).

Para habilitar a API NGINX Plus , inclua a nova diretiva api em um bloco de localização :

server { listen 80;

location /api {
api write=on;
# diretivas que permitem acesso somente a usuários autorizados
}
}

Por padrão, a API NGINX Plus fornece acesso somente leitura aos dados. Adicione o parâmetro write=on à diretiva api para habilitar o acesso de leitura/gravação para que alterações possam ser feitas nos servidores upstream e no novo módulo Key-Value Store . Recomendamos fortemente restringir o acesso à API somente a usuários autorizados, especialmente quando o modo de leitura/gravação estiver ativado.

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

$ curl http://localhost:80/api/1/ ["nginx","processos","conexões","ssl","slabs","http","stream"]

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

  • conexões – Exibir métricas para conexões totais
  • http – Exibir métricas para tráfego HTTP e modificar a configuração upstream HTTP

    Existem também dois “subtipos” em http :

    • http/server_zones – Exibe informações sobre servidores virtuais HTTP
    • http/upstreams – Exibe informações sobre grupos de servidores HTTP upstream e modifica sua configuração
  • nginx – Exibir informações gerais sobre o NGINX
  • processos – Exibir informações sobre processos de trabalho do NGINX
  • slabs – Exibe informações sobre a memória compartilhada alocada pelo NGINX
  • ssl – Exibir métricas para clientes SSL/TLS em tempo real
  • stream – Exibir métricas para 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 relata mais de 40 métricas exclusivas além do que está disponível no NGINX Open Source. Agora você pode acessar essas métricas usando a NGINX Plus API . Use a API para acessar as métricas importantes para você.

Como exemplo, anexe conexões ao URI para gerar um instantâneo do status da conexão, que inclui o número de conexões de clientes aceitas, ativas, descartadas e ociosas.

$ curl http://localhost:80/api/1/connections {"aceito":3,"rejeitado":0,"ativo":1,"ocioso":0}

Outro exemplo: anexe ssl ao URI para gerar um instantâneo das estatísticas do cliente SSL em tempo real.

$ curl http://localhost:80/api/1/ssl {"apertos de mão":0,"apertos_de_mão_falharam":0,"reutilizações_de_sessão":0}

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

No NGINX Plus R12 e versões anteriores, você podia 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 NGINX Plus .

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

upstream backend { zona backends 64k;
servidor 10.10.10.2; 
servidor 10.10.10.4;
}

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

localização /api {
api write=on;
}
}

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

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

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 valor-chave

O NGINX Plus R13 apresenta um novo módulo Key-Value Store . Você pode usar a API NGINX Plus para criar, modificar e remover pares de chave-valor em tempo real 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 fornece uma variedade de soluções de configuração dinâmica para permitir a integração em tempo real com sistemas externos.

Exemplos de casos de uso incluem:

  • Lista de negação de IP dinâmica (consulte o Guia de administração do NGINX Plus )
  • Roteamento de URIs para servidores backend
  • Gerenciando listas de URIs permitidos por usuário
  • Gerenciando regras de redirecionamento (veja o exemplo a seguir)

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

keyval_zone zone=redirects:1M state=state/redirects.json; # Salvar pares de chave-val no arquivokeyval $uri $target zone=redirects; # $uri é a chave, $target é o valor

server {
listen 80;

location /api {
api write=on; # Habilitar a API NGINX Plus (proteger este local em ambientes de produção)
}

if ($target) { # Verdadeiro quando $uri existe na zona de chave-val 'redirects'
return 301 $target; # Redirecionar o cliente para o valor correspondente para $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 redireciona 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 NGINX Plus .

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

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

$ curl -i http://localhost/conf HTTP/1.1 301 Movido temporariamente Localização: http://localhost/conf2017

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

$ curl -iX PATCH -d '{"/conf":"/conf2018"}' http://localhost/api/1/http/keyvals/redirects HTTP/1.1 204 Nenhum conteúdo ...

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 Swagger

A nova API NGINX Plus vem com 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 usuário do Swagger requer que a API NGINX Plus esteja habilitada, o que pode ser feito descomentando o bloco de localização /api/ no arquivo conf.d/default.conf .

# habilitar /api/ localização com controle de acesso apropriado para# fazer uso da API NGINX Plus
#
#localização /api/ {
# api write=on;
# permitir 127.0.0.1;
# negar tudo;
#}

Você também pode explorar 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 upstream e o novo módulo Key-Value Store, é exclusiva do NGINX Plus.

Solicitar espelhamento

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

  • Integração com firewalls de aplicativos da web (WAFs) quando implantados no modo de aprendizagem, para que padrões de solicitação típicos possam ser analisados sem impactar o tráfego de produção
  • Ajuste de desempenho sem risco usando tráfego de produção ao vivo
  • Duplicar uploads de arquivos em um servidor de backup para evitar a replicação do sistema de arquivos entre servidores da web

Habilitar o espelhamento de solicitações tem impacto insignificante no desempenho e na produtividade geral do sistema. O snippet de configuração a seguir mostra como usar a nova diretiva mirror para clonar solicitações e passá-las para um servidor upstream separado.

localização / { espelho /espelho;
proxy_pass http://backend;
}

localização /espelho {
interno;
proxy_pass http://test_backend$request_uri;
}

As solicitações são enviadas por proxy para o grupo upstream de backend para processamento regular. Eles também são clonados e enviados por proxy para um grupo 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.

Melhorias no módulo JavaScript NGINX

Desde que se tornou disponível ao público no NGINX Plus R12 , o módulo NGINX JavaScript (anteriormente chamado de nginScript) continua sendo estendido com suporte à linguagem JavaScript principal. Com esta versão, introduzimos suporte para números hexadecimais (como 0x7b) e notação científica (como 512e10). Métodos primitivos para a classe Object também foram implementados.

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

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

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

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

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

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

O NGINX 1.11.5 e o NGINX Plus R11 introduziram suporte para compilar módulos dinâmicos independentemente do próprio NGINX. Isso permite que os usuários do NGINX e do NGINX Plus usem as compilações oficiais dos repositórios da NGINX, Inc. e carreguem apenas os módulos dinâmicos necessários.

Com o NGINX Plus R13, fornecemos uma ferramenta de construção 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 Criando pacotes instaláveis para módulos dinâmicos em nosso blog.

Observação:  A ferramenta de construção está disponível para NGINX Open Source e NGINX Plus.

Persistência mais rápida da sessão Sticky-Learn

A persistência de sessão é um recurso muito útil do balanceamento de carga do NGINX Plus que permite enviar todas as solicitações de um cliente específico para um servidor. Existem várias maneiras de estabelecer a persistência da sessão; com o método “sticky learn”, o NGINX Plus procura a presença de um cookie específico e fixa o cliente ao mesmo servidor sempre que esse cookie for 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 de sua resposta, em vez de esperar até que a carga de resposta completa chegue. O NGINX Plus pode, portanto, enviar a sessão persistente ao cliente o mais rápido possível. Inclua o novo parâmetro de cabeçalho na diretiva sticky learn :

backends upstream { zona backends 64k;
servidor 10.10.10.2; 
servidor 10.10.10.4;

sticky learn create=$upstream_cookie_sessionid
lookup=$cookie_sessionid
zona=client_sessions:1m
cabeçalho;
}

O parâmetro de cabeçalho é particularmente útil se um aplicativo for propenso a erros e você quiser que o cliente reenvie solicitações com falha para o mesmo servidor upstream.

Observação:  A persistência da sessão Sticky-Learn é exclusiva do NGINX Plus.

Características adicionais

O NGINX Plus R13 apresenta os seguintes recursos adicionais:

  • Trailers HTTP – A diretiva add_trailer permite que trailers arbitrários sejam adicionados ao final das respostas HTTP. O cabeçalho de resposta do trailer permite que o remetente inclua campos adicionais no final de mensagens fragmentadas para fornecer metadados que podem ser gerados dinamicamente enquanto o corpo da mensagem é enviado, 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 da comunidade do filtro de substituições HTTP agora é suportado e incluído em nossas distribuições NGINX Plus. O módulo pode aplicar substituições de expressões regulares e de strings fixas aos corpos de resposta. Ele verifica o buffer das cadeias de saída e compara as strings linha por linha. Você também pode acessar o módulo na página Módulos Dinâmicos .
  • Desligamento normal do trabalhador – Use a diretiva worker_shutdown_timeout para definir um tempo limite que permita o desligamento normal dos processos do trabalhador para que sejam concluídos mais rapidamente. Quando o tempo limite expira após um sinal de desligamento ou reinicialização ser recebido, o NGINX Plus tenta fechar todas as conexões de cliente abertas.

Atualize para R13 ou experimente o NGINX Plus

Se você estiver executando o NGINX Plus, recomendamos fortemente que atualize para a versão 13 o mais rápido possível. Você aprenderá uma série de correções e melhorias, e isso nos ajudará a ajudar você caso precise abrir um tíquete de suporte. Instruções de instalação e atualização podem ser encontradas no portal do cliente .

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 aceleração web, balanceamento de carga e entrega de aplicativos, ou como um servidor web totalmente suportado com APIs aprimoradas de monitoramento e gerenciamento. Você pode começar hoje mesmo gratuitamente com uma avaliação de 30 dias e ver por si 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."