BLOG | NGINX

Anunciando o NGINX Plus R14

NGINX-Parte-de-F5-horiz-preto-tipo-RGB
Miniatura de Liam Crilly
Liam Crilly
Publicado em 12 de dezembro de 2017

Temos o prazer de anunciar que o NGINX Plus Release 14 (R14) já está disponível para nossos assinantes do NGINX Plus. O NGINX Plus é o único balanceador de carga, cache de conteúdo e servidor web tudo-em-um. Ele é baseado no NGINX Open Source e adiciona recursos exclusivos junto com suporte premiado 24 horas . O NGINX Plus R14 inclui novos aprimoramentos de segurança e clustering.

Com o NGINX Plus, você pode aplicar controles de acesso usando JSON Web Tokens (JWTs). O NGINX Plus R14 adiciona suporte para declarações JWT aninhadas , para que você possa conceder ou negar acesso com base em informações de associação de grupo aninhadas dentro de um JWT. O suporte nativo à autenticação JWT, introduzido pela primeira vez no NGINX Plus R10 , permite que o NGINX Plus seja usado como um gateway de autenticação para suas APIs e aplicativos.

Os recursos adicionais do NGINX Plus R14 incluem:

  • Suporte estendido para clustering (prévia de tecnologia) – Convidamos você a testar uma prévia da nova funcionalidade para compartilhar informações de estado entre as instâncias do NGINX Plus em um cluster. Na visualização, o estado do método de persistência da sessão de aprendizado persistente é compartilhado. Em versões futuras, expandiremos o suporte de cluster para outros recursos do NGINX Plus.
  • Tamanhos de chave JWT maiores – Além do suporte para declarações JWT aninhadas e dados de matriz, tamanhos de chave maiores (até 512 bits) agora são suportados para algoritmos de assinatura JWT. Isso proporciona mais segurança e flexibilidade ao validar JWTs.
  • Armazenamento de chave-valor de fluxo e API – O poderoso armazenamento de chave-valor e API introduzidos na versão 13 para aplicativos HTTP é estendido para aplicativos TCP e UDP no contexto de fluxo .
  • Melhorias no módulo NGINX JavaScript – O módulo, que permite que você execute código JavaScript no NGINX Plus, agora tem suporte de linguagem adicional para o objeto JSON. [O módulo era anteriormente chamado de nginScript.] Isso permite que você analise e extraia informações de respostas JSON recebidas de APIs de backend nativamente e use métodos de estilo Node.js para acessar seu sistema de arquivos. O módulo agora também fornece backtraces para uma ampla gama de objetos de exceção e erro quando eles ocorrem, para facilitar a depuração e a solução de problemas.
  • Mais recursos – O NGINX Plus também apresenta um painel de monitoramento de atividades ao vivo atualizado, uma nova variável SSL e drenagem de servidor upstream.

Mudanças no comportamento

  • A API NGINX Plus foi atualizada para a versão 2. Verifique a documentação de compatibilidade da API se estiver pensando em usar os novos recursos da API do NGINX Plus.
  • As APIs nos módulos Upstream-Conf e Status estendidos (habilitados com as diretivas upstream_conf e status ) foram descontinuadas a partir do NGINX Plus R13 . Eles foram substituídos pela nova API NGINX Plus , que é usada pelo painel de monitoramento de atividades ao vivo atualizado incluído no R14.
  • O NGINX Plus agora está disponível para o Ubuntu 17.10 (Artful Aardvark).
  • O NGINX Plus não é mais suportado no Debian 7 (Wheezy).

Recursos do NGINX Plus R14 em detalhes

Melhorias no JWT

Os implantadores de APIs e microsserviços estão recorrendo ao padrão JSON Web Token (JWT, pronunciado “jot”) por sua simplicidade e flexibilidade. Um JWT é um meio compacto e altamente portátil de troca de informações de identidade. Você pode obter JWTs de vários emissores, incluindo Okta, OneLogin e soluções locais. O NGINX Plus pode então conceder ou negar acesso com base no fato de o usuário ou cliente da API ter ou não apresentado um JWT válido.

O NGINX Plus R14 adiciona suporte para declarações JWT aninhadas e dados de matriz, bem como tamanhos de chave maiores para algoritmos de assinatura JWT. Isso proporciona mais flexibilidade e maior segurança ao validar JWTs.

Suporte para declarações JWT aninhadas e dados de matriz

Uma carga útil JWT pode conter informações “aninhadas” adicionais sobre o usuário, como associação ao grupo, que podem ser usadas para autorizar o acesso a um recurso. Isso ajuda a evitar a necessidade de consultar um banco de dados várias vezes para autorizar solicitações do usuário.

Considere a seguinte carga útil do JWT:

{ "exp": 1513429677,
"sub": "xample@example.com",
"aud": "nginx",
"atributos": {
"nome": "Xavier Ample",
"quarto": "A123",
"depto": "Demonstrações"
},
"grupos": [
"Administrador",
"Foobar",
"Bazpub"
]
}

No JWT acima, atributos são um objeto de “reivindicação aninhada” e grupos são uma matriz. Você pode usar o seguinte snippet de configuração para passar o valor do nome do objeto de atributos para o backend e negar acesso a usuários que não estejam no grupo Administrador .

auth_jwt_claim_set $jwt_groups groups; # O valor do array será unido como valores separados por vírgulaauth_jwt_claim_set $jwt_real_name attributes name; # Este valor tem dois níveis de profundidade

map $jwt_groups $isAdmin {
"~\bAdministrator\b" 1; # Aparece dentro dos limites de palavras (\b) da lista CSV
default 0;
}

server {
listen 443 ssl;
#ssl_*; # Configuração para terminação SSL/TLS

auth_jwt "site fechado";
auth_jwt_key_file jwk.json;

location / {
proxy_set_header X-RealName $jwt_real_name; # Passa o nome real como cabeçalho
proxy_set_header X-Subject $jwt_claim_sub; # Reivindicações L1 definidas automaticamente
proxy_pass http://my_backend;
}

location /admin {
if ( $isAdmin = 0 ) {
return 403; # Proibido
}
proxy_pass http://my_backend;
}
}

Aqui estão mais detalhes sobre como essa configuração funciona:

  • Usando a diretiva auth_jwt_claim_set , definimos a variável NGINX $jwt_groups para a matriz de grupos definida no JWT. Os valores na matriz são separados por vírgulas e atribuídos a $jwt_groups .
  • Usando a diretiva map , pesquisamos na lista de grupos a palavra-chave Administrator . Se estiver presente, o usuário será considerado um administrador e $isAdmin será definido como 1. Caso contrário, $isAdmin é definido como 0.
  • O bloco de localização para o URI /admin verifica a variável $isAdmin . Se 0, NGINX retorna código de status 403Proibido retornar ao cliente.

Com o NGINX Plus R14 , você também pode criar variáveis a partir de declarações JWT aninhadas. As variáveis podem então ser colocadas em cabeçalhos HTTP antes de serem enviadas por proxy para servidores de backend.

No exemplo acima, usamos a diretiva auth_jwt_claim_set para definir a variável NGINX $jwt_real_name para o valor do objeto de nome dentro da reivindicação de atributos . A diretiva proxy_set_header define o cabeçalho HTTP X-RealName para o valor do objeto name e envia a solicitação para my_backend .

Para obter mais informações sobre todas as diretivas de configuração disponíveis para uso na autenticação de JWTs com o NGINX Plus, consulte a documentação de referência .

Tamanhos de chave maiores para algoritmos de assinatura JWT

O NGINX Plus R14 agora oferece suporte a chaves de assinatura de 256 bits, 384 bits e 512 bits para validação de assinatura mais forte e integração mais fácil com produtos de gerenciamento de identidade e acesso (IAM) que usam chaves de assinatura mais longas por padrão. As chaves de assinatura mais longas estão disponíveis para todos os algoritmos de assinatura suportados:

  • HMAC com SHA‑2 (“HS”)
  • RSA PKCS #1 com SHA‑2 (“RS”)
  • Algoritmo de Assinatura Digital de Curva Elíptica (“ES”)

Por exemplo, você pode configurar o NGINX Plus R14 para aceitar apenas tokens da web JSON assinados com o algoritmo RS512:

server { listen 443 ssl;
#ssl_*; # Configuração para terminação SSL/TLS

auth_jwt "site fechado";
auth_jwt_key_file jwk.json;

location / {
if ( $jwt_header_alg != RS512 ) {
return 401;
}
proxy_pass http://my_backend;
}
}

Neste caso, o NGINX Plus não faz solicitações de proxy se o JWT não tiver sido assinado com o algoritmo RS512 e retorna o código de status 401Não autorizado para o cliente que emitiu a solicitação.

Observação : O suporte a JWT é exclusivo do NGINX Plus.

Armazenamento de valor-chave e API para módulo de fluxo

O NGINX Plus R13 introduziu o módulo Key-Value Store para HTTP , permitindo que você crie, modifique e expurgue pares de chave-valor em uma ou mais zonas de memória compartilhada instantaneamente. Um ótimo caso de uso para a API de armazenamento de chave-valor é usá-la com fail2ban para criar uma lista de negação de IP dinâmica .

O NGINX Plus R14 adiciona o módulo Key-Value Store para Stream , disponibilizando os mesmos recursos de par chave-valor para aplicativos TCP e UDP e para aplicativos HTTP.

A reconfiguração dinâmica do armazenamento de chave-valor no contexto do fluxo é implementada no NGINX Plus R14 como parte da API do NGINX Plus .

Observação : O armazenamento de chave-valor e a API são exclusivos do NGINX Plus.

Melhorias no módulo JavaScript NGINX

O módulo NGINX JavaScript (anteriormente chamado de nginScript) é uma linguagem de script baseada em JavaScript para NGINX Plus. No NGINX Plus R14 , os recursos do NGINX JavaScript foram estendidos para melhorar ainda mais a programabilidade. O pacote de módulos dinâmicos JavaScript NGINX atualizado fornece os seguintes novos aprimoramentos.

Suporte a Objeto JSON

O objeto JavaScript JSON agora está disponível como um objeto nativo no NGINX JavaScript. Isso fornece uma maneira mais conveniente de gerenciar estruturas de dados complexas e também permite que o NGINX JavaScript analise e manipule respostas JSON recebidas de APIs de backend.

O exemplo de shell njs a seguir demonstra como analisar e extrair dados JSON usando a sintaxe de objeto integrada.

$ Nova Jerseynjscript interativo

v.<Tab> -> as propriedades e métodos de protótipo de v.
digite console.help() para mais informações

>> var my_data = '{"cores":[{"nome":"vermelho","fantasia":"pó de tijolo"}, {"nome":"azul","fantasia":"borrifo do mar"}]}';
>> var meu_objeto = JSON.parse(meus_dados);
>> meu_objeto.cores[1].fantasia;
respingo do mar
>>

Acesso ao sistema de arquivos

Node.js, a implementação mais popular de JavaScript do lado do servidor, fornece métodos integrados para acessar o sistema de arquivos do sistema operacional (o JavaScript do lado do cliente não permite acesso ao sistema de arquivos). Com o NGINX Plus R14 , agora você pode usar métodos do sistema de arquivos Node.js no NGINX JavaScript para ler e gravar arquivos, permitindo que você personalize seu fluxo de trabalho de entrega de aplicativos. São permitidas as seguintes operações:

  • Ler – fs.readFile , fs.readFileSync
  • Escrever – fs.writeFile , fs.writeFileSync
  • Anexar – fs.appendFile , fs.appendFileSync

Este exemplo de shell NGINX JavaScript mostra como o NGINX JavaScript pode ser usado para ler conteúdo de arquivo em uma variável.

$ Nova Jerseynjscript interativo

v.<Tab> -> as propriedades e métodos de protótipo de v.
digite console.help() para mais informações

>> var fs = requer('fs');
>> var tz = fs.readFileSync('/etc/fusohorário');
>> tz
Europa/Londres
>>

Objetos de erro e backtraces

Para ajudar ainda mais os desenvolvedores com depuração e solução de problemas, uma ampla variedade de objetos de erro agora está disponível:

  • Erro
  • Erro de avaliação
  • Erro interno
  • Erro de alcance
  • Erro de referência
  • Erro de Sintaxe
  • Erro de tipo
  • Erro URI

Além disso, o NGINX JavaScript agora fornece backtraces para erros e exceções. A entrada a seguir do log de erros mostra um backtrace simples para uma operação de sistema com falha.

2017/12/12 01:52:08 [erro] 43441#43441: *10 exceção js: Erro: Nenhum arquivo ou diretório em nativo (nativo)
em my_function (:1)
em principal (nativo)
, cliente: 127.0.0.1, servidor: , solicitação: "OBTER / HTTP/1.1", host: "localhost:80"

Aprenda como começar a usar o NGINX JavaScript<.htmla> em nosso blog.

Painel NGINX Plus usando a API NGINX Plus

O NGINX Plus R13 introduziu a API NGINX Plus , fornecendo acesso ao monitoramento e métricas em tempo real em um formato JSON. No NGINX Plus R14 , o painel de monitoramento de atividades ao vivo integrado agora usa a API do NGINX Plus , fornecendo mais de 80 métricas de monitoramento ao usuário em tempo real.

As APIs de reconfiguração dinâmica e status estendido usadas pelo painel em versões anteriores do NGINX Plus estão obsoletas. As APIs ainda estão disponíveis nesta versão e serão incluídas no NGINX Plus R15 . Eles serão removidos completamente com o NGINX Plus R16 , então recomendamos que você atualize suas configurações agora.

A configuração do painel obsoleto se parece com isto:

location /status { # DEPRECATED status; # DEPRECATED
# diretivas que controlam o acesso, como 'allow' e 'deny'
}

location = /status.html { # DEPRECATED
root /usr/share/nginx/html; # DEPRECATED
}

Para migrar suas instâncias existentes do NGINX Plus para o novo painel do NGINX Plus, substitua o snippet anterior por este:

location /api { api write=on;
# diretivas que controlam o acesso, como 'allow' e 'deny'
}

location = /dashboard.html {
root /usr/share/nginx/html;
}

# Redirecionar solicitações feitas para o painel antigo
location = /status.html {
return 301 /dashboard.html;
}

Conforme mostrado nos snippets, recomendamos fortemente que você limite o acesso à API, por exemplo, com diretivas allow e deny . Certifique-se de migrar os controles de acesso existentes do local /status para o local /api .

Para obter mais informações sobre a nova API NGINX Plus , consulte o anúncio do NGINX Plus R13 .

Observação : O painel integrado é exclusivo do NGINX Plus.

Drenando servidores upstream no arquivo de configuração

Ao colocar um servidor offline, você pode melhorar a experiência do usuário permitindo que sessões existentes sejam concluídas e impedindo que novas sessões sejam estabelecidas. O servidor não fica offline até que não haja mais sessões ativas. Isso é conhecido como esvaziamento do servidor. Você pode fazer isso dinamicamente com a API NGINX Plus enviando uma solicitação PATCH que inclui {"drain":true} para o recurso de API do servidor relevante.

O NGINX Plus R14 estende essa funcionalidade para a configuração baseada em arquivo, fornecendo um parâmetro de drenagem para a diretiva do servidor upstream.

upstream my_backend { servidor 10.0.0.1;
servidor 10.0.0.2;
servidor 10.0.0.3 dreno;
}

Ao recarregar a configuração do NGINX Plus, o servidor upstream com IP 10.0.0.3 entra no modo de drenagem. Mais tarde, você pode desativar completamente o servidor removendo a diretiva de servidor correspondente ou substituindo o parâmetro draining por down .

Suporte de cluster para Sticky Learn (prévia de tecnologia)

Com o NGINX Plus R14 , temos o prazer de anunciar uma prévia tecnológica de um recurso futuro para compartilhamento de estado em um cluster de instâncias do NGINX Plus. A prévia da tecnologia implementa o método de aprendizado persistente de persistência de sessão para demonstrar os benefícios de compartilhar dados de sessão que, de outra forma, seriam gerenciados individualmente por cada instância.

A prévia da tecnologia é fornecida como um pacote instalável separado e está disponível mediante solicitação. Entre em contato com seu representante de vendas da NGINX para obter acesso.

Notas:

  1. A funcionalidade de agrupamento de aprendizado persistente está em status de visualização e, portanto, não é adequada para uso em produção. Se o compartilhamento de estado em um cluster for um requisito importante para seu ambiente, recomendamos que você teste a prévia da tecnologia e forneça feedback ao NGINX sobre o quão bem ela atende às suas necessidades.
  2. Pacotes de visualização de tecnologia estão disponíveis para CentOS/RHEL/Oracle Linux 7, Debian 8 e 9, e Ubuntu 16.04, 16.10 e 17.10.

Observação : O suporte a clustering e a persistência de sessão de aprendizado persistente são exclusivos do NGINX Plus.

Características adicionais

O NGINX Plus R14 também inclui os seguintes aprimoramentos:

  • Persistência do estado do resolvedor em recargas – Uma maneira de reconfigurar dinamicamente o conjunto de servidores em um grupo upstream é usar um nome de host ou domínio como parâmetro para a diretiva do servidor ; o DNS resolve o nome periodicamente e o NGINX Plus usa automaticamente o conjunto revisado de servidores (consulte o Guia de administração do NGINX Plus ). O NGINX Plus agora retém os registros DNS para o nome do host ou nome de domínio após uma recarga do NGINX Plus. Anteriormente, o nome tinha que ser resolvido novamente após uma recarga, o que significa que as solicitações que chegavam antes da resolução ser concluída não podiam ser atendidas.
  • Nova variável de certificado de cliente SSL – A variável $ssl_client_escaped_cert é uma nova variável NGINX incorporada que fornece uma maneira segura e conveniente de codificar seus certificados de cliente em um cabeçalho HTTP para que você possa enviá-los para seus aplicativos de backend. A variável é codificada por URL.

Atualize ou experimente o NGINX Plus

O NGINX Plus R14 inclui recursos de autenticação aprimorados para seus aplicativos cliente, recursos de cluster adicionais, aprimoramentos do JavaScript do NGINX e correções de bugs importantes . Em particular, o NGINX Plus R13 introduziu um bug para verificações de integridade ativas, por meio do qual um antigo processo de trabalho pode executar verificações de integridade indefinidamente. Isso foi resolvido com o NGINX Plus R14 .

Se você estiver executando o NGINX Plus, recomendamos fortemente que atualize para a versão 14 o mais rápido possível. Você receberá uma série de correções e melhorias, e a atualização ajudará o NGINX a ajudá-lo quando precisar abrir um tíquete de suporte. As instruções de instalação e atualização estão disponíveis 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 . Veja você 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."