Temos o prazer de anunciar a disponibilidade do NGINX Plus Release 28 (R28) . Baseado no NGINX Open Source, o NGINX Plus é o único servidor web de software completo , balanceador de carga, proxy reverso, cache de conteúdo e gateway de API.
Os recursos novos e aprimorados do NGINX Plus R28 incluem:
Métricas TLS adicionais – O NGINX Plus R28 coleta estatísticas TLS adicionais nos níveis de todo o sistema, do lado do cliente e do lado do servidor, fornecendo insights essenciais ao solucionar problemas relacionados a SSL/TLS na configuração de proxy e para conexões com clientes e servidores upstream.
O painel de monitoramento de atividades ao vivo do NGINX Plus é atualizado para exibir os novos dados da sessão SSL.
http e stream que decodificam o TLV e definem uma variável para encaminhar o identificador do cliente para serviços de backend.samesite do cookie pegajoso – No NGINX Plus R28 , o valor do parâmetro samesite para a diretiva sticky cookie pode ser uma variável. Essa melhoria permite um gerenciamento mais fácil do tráfego e mais segurança.Completando o lançamento, estão novos recursos e correções de bugs herdados do NGINX Open Source e atualizações do módulo JavaScript do NGINX.
Observação: Se você estiver atualizando de uma versão diferente do NGINX Plus R27 , não deixe de conferir a seção Mudanças importantes no comportamento nos blogs de anúncios para todas as versões entre a atual e esta.
Novos sistemas operacionais e arquiteturas suportados:
Sistemas operacionais mais antigos removidos:
Sistemas operacionais e arquiteturas mais antigos foram descontinuados e programados para remoção no NGINX Plus R29 :
Content-Length e Transfer-Encoding duplicados agora são rejeitados, bem como as respostas com cabeçalhos Content-Length ou Transfer-Encoding inválidos, ou se Content-Length e Transfer-Encoding estiverem presentes na resposta.A observabilidade de eventos e erros de SSL/TLS é importante ao solucionar problemas relacionados a TLS com configuração de proxy, servidores upstream e clientes. Desde a introdução da API NGINX Plus no NGINX Plus R13 , o NGINX Plus coletou três métricas TLS no nível de todo o sistema:
handshakes – Número de handshakes SSL bem-sucedidoshandshakes_failed – Número de falhas de handshake SSL (que não incluem falhas de verificação de certificado que acontecem após o handshake SSL)session_reuses – Número de reutilizações de sessão SSLNo NGINX Plus R27<.htmla> e posteriores, você pode configurar a coleta das três métricas para servidores upstream e servidores virtuais individuais.
O NGINX Plus R28 expande o conjunto de métricas TLS com novos contadores para erros de handshake e falhas de validação de certificado nos módulos HTTP e Stream (aqui fornecemos exemplos apenas para módulos HTTP, mas as métricas Stream disponíveis são semelhantes). Para obter detalhes sobre como configurar a coleta de métricas para servidores upstream e servidores virtuais individuais, consulte o blog de anúncio do NGINX Plus R27<.htmlspan> .
Contadores para os seguintes erros de handshake são novos no NGINX Plus R28 :
handshake_timeout – Número de falhas de handshake devido ao tempo limite de handshakeno_common_cipher – Número de falhas de handshake devido à falta de uma cifra comum entre as partes no handshake (não coletado para conexões com servidores upstream porque não se aplica)no_common_protocol – Número de falhas de handshake devido à falta de um protocolo comum entre as partespeer_rejected_cert – Número de falhas de handshake devido à outra parte rejeitar o certificado apresentado pelo NGINX Plus e fornecer a mensagem de alerta adequadaFalhas na verificação de certificado agora são relatadas na nova seção verify_failures da saída da API quando você configura a verificação de certificado:
ssl_verify_client [ HTTP ][ Stream ]Para conexões com servidores com essas diretivas específicas de protocolo:
grpc_ssl_verificarproxy_ssl_verify [ HTTP ][ Fluxo ]verificação uwsgi_sslQuando ocorre uma falha na verificação do certificado, a métrica para a causa correspondente é incrementada e a conexão é interrompida. Observe, no entanto, que o contador básico de handshakes ainda é incrementado porque essas falhas ocorrem depois que o handshake é bem-sucedido.
As métricas para validação de certificado com falha são:
expired_cert – O par apresentou um certificado expiradohostname_mismatch – O certificado do servidor não corresponde ao nome do host (não coletado para conexões com clientes)no_cert – O cliente não forneceu um certificado conforme necessário (não coletado para conexões com servidores upstream)revoked_cert – O par apresentou um certificado revogadooutro – Contador explícito para outras falhas de verificação de certificadoAqui está um conjunto de métricas TLS de exemplo para conexões HTTP no nível de todo o sistema:
$ curl 127.0.0.1:8080/api/8/ssl{
    "handshakes": 32,
    "session_reuses": 0,
    "handshakes_failed": 8,
    "no_common_protocol": 4,
    "no_common_cipher": 2,
    "handshake_timeout": 0,
    "peer_rejected_cert": 0,
    "verify_failures": {
        "no_cert": 0,
        "expired_cert": 2,
        "revoked_cert": 1,
        "hostname_mismatch": 2,
        "other": 1
    }
}
Aqui está um conjunto de métricas de exemplo para conexões entre clientes e o servidor virtual HTTP s9 (conforme observado anteriormente, o contador hostname_mismatch não é coletado para tais conexões):
$ curl 127.0.0.1:8080/api/8/http/server_zones/s9{
    ...
    "ssl": {
        "handshakes": 0,
        "session_reuses": 0,
        "handshakes_failed": 1,
        "no_common_protocol": 0,
        "no_common_cipher": 1,
        "handshake_timeout": 0,
        "peer_rejected_cert": 0,
        "verify_failures": {
            "no_cert": 0,
            "expired_cert": 0,
            "revoked_cert": 0,
            "other": 0
        }
    }
    ...
}
Aqui está um conjunto de métricas de exemplo para conexões HTTP com servidores no grupo upstream u2 (conforme observado anteriormente, os contadores no_cert e no_common_cipher não são coletados para tais conexões):
$ curl 127.0.0.1:8080/api/8/http/upstreams/u2{
    "peers": [
        {
            "id": 0,
            "server": "127.0.0.1:8082",
            "name": "127.0.0.1:8082",
            ...
            "ssl": {
                "handshakes": 1,
                "session_reuses": 0,
                "handshakes_failed": 0,
                "no_common_protocol": 0,
                "handshake_timeout": 0,
                "peer_rejected_cert": 0,
                "verify_failures": {
                    "expired_cert": 1,
                    "revoked_cert": 0,
                    "hostname_mismatch": 0,
                    "other": 0
                }
            },
            ...
        }
    ],
}
Para o NGINX Plus R28 e posteriores, o painel de monitoramento de atividades ao vivo exibe as novas métricas TLS descritas acima. Esta captura de tela mostra métricas para conexões com clientes. Para visualizar as novas métricas, passe o mouse sobre o valor na coluna SSL > Handshakes com falha, conforme mostrado.
Os três principais provedores de nuvem – Amazon Web Services (AWS), Google Cloud Platform (GCP) e Microsoft Azure – oferecem cada um um “serviço privado” onde você pode permitir que clientes externos acessem seus serviços sem expô-los na Internet pública. Cada serviço faz uso de um identificador de cliente que é representado em um vetor tipo-comprimento-valor (TLV) em um cabeçalho do protocolo PROXY v2. Os identificadores específicos do serviço são:
PP2_SUBTYPE_AWS_VPCE_IDpscConnectionIdPP2_SUBTYPE_AZURE_PRIVATEENDPOINT_LINKIDPor padrão, esses identificadores de cliente não são passados para serviços de backend. O NGINX Plus R28 apresenta módulos para os contextos http e stream – ngx_http_proxy_protocol_vendor_module e ngx_stream_proxy_protocol_vendor_module – que decodificam o TLV e definem uma variável para encaminhar o identificador para serviços de backend.
Para obter informações gerais sobre como o NGINX Plus usa o protocolo PROXY para obter endereços IP e outras informações sobre clientes, consulte Aceitando o protocolo PROXY no Guia de administração do NGINX Plus.
Na AWS, o endereço IP de origem para o tráfego proveniente de clientes por meio de um serviço de endpoint de Nuvem Privada Virtual (VPC) é o endereço IP privado do nó do Balanceador de Carga de Rede. Se o aplicativo de backend exigir endereços IP reais e outros identificadores para clientes, eles poderão ser obtidos dos cabeçalhos do protocolo PROXY v2.
Na AWS, um vetor TLV personalizado codifica o ID da VPC do ponto de extremidade no cabeçalho do protocolo PROXY v2 PP2_SUBTYPE_AWS_VPCE_ID . (Para mais informações, consulte a documentação da AWS .)
| Campo | Comprimento (Octetos) | Descrição | 
|---|---|---|
| Tipo | 1 | PP2_TYPE_AWS ( 0xEA ) | 
| Comprimento | 2 | O comprimento do valor | 
| Valor | 1 | PP2_SUBTIPO_AWS_VPCE_ID ( 0x01 ) | 
| Varia (comprimento do valor menos 1) | O ID do ponto final | 
O NGINX Plus R28 decodifica o TLV e passa o ID do endpoint para aplicativos de backend na variável $proxy_protocol_tlv_aws_vpce_id .
Observação:  No bloco do servidor onde você faz referência à variável $proxy_protocol_tlv_aws_vpce_id , você também deve incluir o parâmetro proxy_protocol na diretiva listen [ HTTP ][ Stream ]. Para um exemplo, veja a linha 8 do proxy_protocol_v2.conf logo abaixo.
Esta configuração de exemplo para AWS verifica se o ID da VPC é aceitável e, se for, o passa para o aplicativo de backend como o segundo parâmetro da diretiva add_header :
No GCP Private Service Connect, o endereço IP de origem para o tráfego proveniente de clientes é um “endereço em uma das sub-redes do Private Service Connect na rede VPC do produtor do serviço”. Se o aplicativo de backend exigir endereços IP reais e outros identificadores para clientes, eles poderão ser obtidos dos cabeçalhos do protocolo PROXY v2.
No GCP, um vetor TLV personalizado codifica o ID de conexão exclusivo (no momento) no cabeçalho do protocolo PROXY v2 pscConnectionId . (Para mais informações, consulte a documentação do GCP .)
| Campo | Comprimento (Bytes) | Descrição | 
|---|---|---|
| Tipo | 1 | 0xE0 ( PP2_TYPE_GCP ) | 
| Comprimento | 2 | 0x8 (8 bytes) | 
| Valor | 8 | O pscConnectionId de 8 bytes em ordem de rede | 
O NGINX Plus R28 decodifica o TLV e passa o valor de pscConnectionId para aplicativos de backend na variável $proxy_protocol_tlv_gcp_conn_id .
Observação:  No bloco do servidor onde você referencia a variável $proxy_protocol_tlv_gcp_conn_id , você também deve incluir o parâmetro proxy_protocol na diretiva listen [ HTTP ][ Stream ]. Para um exemplo, veja a linha 8 do proxy_protocol_v2.conf acima.
No Microsoft Azure Private Link, o endereço IP de origem para o tráfego proveniente de clientes é o “endereço de rede traduzido (NAT) no lado do provedor de serviços usando o IP NAT [endereço] alocado da rede virtual do provedor”. Se o aplicativo de backend exigir endereços IP reais e outros identificadores para clientes, eles poderão ser obtidos dos cabeçalhos do protocolo PROXY v2.
No Azure, um vetor TLV personalizado codifica o LinkID do cliente no cabeçalho do protocolo PROXY v2 PP2_SUBTYPE_AZURE_PRIVATEENDPOINT_LINKID . (Para obter mais informações, consulte a documentação do Azure .)
| Campo | Comprimento (Octetos) | Descrição | 
|---|---|---|
| Tipo | 1 | PP2_TIPO_AZURE ( 0xEE ) | 
| Comprimento | 2 | Comprimento do valor | 
| Valor | 1 | PP2_SUBTYPE_AZURE_PRIVATEENDPOINT_LINKID ( 0x01 ) | 
| 4 | UINT32 (4 bytes) representando o LINKID do ponto de extremidade privado. Codificado em formato little-endian. | 
O NGINX Plus R28 decodifica o TLV e passa o LinkID para aplicativos de backend na variável $proxy_protocol_tlv_azure_pel_id .
Observação:  No bloco do servidor onde você faz referência à variável $proxy_protocol_tlv_azure_pel_id , você também deve incluir o parâmetro proxy_protocol na diretiva listen [ HTTP ][ Stream ]. Para um exemplo, veja a linha 8 do proxy_protocol_v2.conf acima.
samesite do cookie pegajosoEm versões anteriores do NGINX Plus, três valores estáticos ( strict , lax e none ) eram aceitáveis para o parâmetro samesite na diretiva de cookie fixo . No NGINX Plus R28 , o valor também pode ser uma variável.
Por padrão (não há parâmetro samesite ), o NGINX não injeta o atributo SameSite no cookie. Quando o parâmetro samesite é uma variável, o resultado depende de como a variável é resolvida em tempo de execução:
strict , lax e none ) – NGINX injeta o conjunto de atributos SameSite para esse valor"" ) – NGINX não injeta o atributo SameSiteSameSite definido como Strict (a configuração mais segura)Esta configuração de exemplo define o atributo samesite com base no valor do cabeçalho HTTP User-Agent (isso é bom para clientes legados que não oferecem suporte ao atributo SameSite ):
 
O NGINX Plus R28 é baseado no NGINX Open Source 1.23.2 e herda alterações funcionais e correções de bugs feitas desde o lançamento do NGINX Plus R27 (no NGINX 1.23.0 até 1.23.2). As alterações e correções de bugs incluem:
ipv4=off na diretiva do resolvedor HTTP desabilita a consulta de endereços IPv4.shared para a diretiva ssl_session_cache , as chaves de tíquete de sessão TLS agora são rotacionadas automaticamente.crit para info .Para obter a lista completa de novos recursos, alterações e correções de bugs herdados dessas versões, consulte o arquivo CHANGES .
O NGINX Plus R28 incorpora alterações e correções feitas nas versões 0.7.5 a 0.7.8 do módulo NGINX JavaScript (njs). Destacamos alguns dos mais significativos em Torne sua configuração NGINX ainda mais modular e reutilizável com o njs 0.7.7 em nosso blog. Para uma lista completa, consulte o arquivo Alterações .
Se você estiver executando o NGINX Plus, recomendamos fortemente que atualize para o NGINX Plus R28 o mais rápido possível. Você também receberá diversas correções e melhorias adicionais, e isso ajudará o NGINX a ajudar você quando precisar abrir um tíquete de suporte.
Se você ainda não experimentou o NGINX Plus, recomendamos que experimente – para segurança, balanceamento de carga e gateway de API, ou como um servidor web totalmente suportado com APIs aprimoradas de monitoramento e gerenciamento. Você pode começar hoje mesmo com um teste gratuito de 30 dias .
"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."