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:
de fluxo
.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.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.
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:
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
.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.de localização
para o URI /admin verifica a variável $isAdmin
. Se 0, NGINX retorna código de status 403
Proibido
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 .
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:
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 401
Não autorizado
para o cliente que emitiu a solicitação.
Observação : O suporte a JWT é exclusivo do NGINX Plus.
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.
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.
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
>>
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:
fs.readFile
, fs.readFileSync
fs.writeFile
, fs.writeFileSync
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
>>
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.
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.
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
.
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:
Observação : O suporte a clustering e a persistência de sessão de aprendizado persistente são exclusivos do NGINX Plus.
O NGINX Plus R14 também inclui os seguintes aprimoramentos:
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.$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.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."