Treinamento de Express e Node.js do StrongLoop

Esta tradução fornecida pelo StrongLoop / IBM.

Este documento pode estar desatualizado em relação à documentação em Inglês. Para obter as atualizações mais recentes, consulte a documentação em Inglês.

Express atrás de proxies

Ao executar um aplicativo do Express atrás de um proxy, configure (usando app.set()) a variável do aplicativo trust proxy para um dos valores listados na seguinte tabela.

Apesar de a execução do aplicativo não falhar se a variável do aplicativo trust proxy não estiver configurada, ele irá registrar incorretamente o endereço de IP do proxy como o endereço de IP do cliente a não ser que o trust proxy esteja configurado.

TipoValor
Booleano

Se true, o endereço de IP do cliente será compreendido como a entrada mais a esquerda no cabeçalho X-Forwarded-*.

Se false, o aplicativo é compreendido como exposto diretamente à Internet e o endereço de IP do cliente é derivado a partir do req.connection.remoteAddress. Esta é a configuração padrão.

Endereços IP

Um endereço de IP, sub-rede, ou uma matriz de endereços de IP e sub-redes confiáveis. A lista a seguir mostra os nomes de sub-rede pré-configurados:

  • loopback - 127.0.0.1/8, ::1/128
  • linklocal - 169.254.0.0/16, fe80::/10
  • uniquelocal - 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, fc00::/7

É possível configurar endereços de IP de qualquer uma das formas a seguir:

app.set('trust proxy', 'loopback') // specify a single subnet
app.set('trust proxy', 'loopback, 123.123.123.123') // specify a subnet and an address
app.set('trust proxy', 'loopback, linklocal, uniquelocal') // specify multiple subnets as CSV
app.set('trust proxy', ['loopback', 'linklocal', 'uniquelocal']) // specify multiple subnets as an array

Quando especificados, os endereços de IP ou sub-redes são excluídos do processo de determinação de endereço, e o endereço de IP não confiável mais próximos do servidor de aplicativos é determinado como o endereço de IP do cliente.

Número

Confia no n-ésimo hop a partir do servidor de proxy frontal como o cliente.

Função

Implementação de confiança customizada. Use apenas se souber o que está fazendo.

app.set('trust proxy', function (ip) {
  if (ip === '127.0.0.1' || ip === '123.123.123.123') return true; // trusted IPs
  else return false;
});

Configurando um valor não-false para o trust proxy resulta em três mudanças importantes:

A configuração do trust proxy é implementada usando o pacote proxy-addr. Para obter mais informações, consulte a documentação.