Formación en Express y Node.js de StrongLoop

Esta traducción proporcionada por StrongLoop / IBM.

Este documento puede estar desfasado respecto a la documentación en inglés. Para ver las últimas actualizaciones, consulte la documentación en inglés.

Express detrás de proxies

Cuando ejecute una aplicación Express detrás de un proxy, establezca (utilizando app.set()) la variable de aplicación trust proxy en uno de los valores de la tabla siguiente.

Aunque la aplicación no dejará de ejecutarse si no se establece la variable de aplicación trust proxy, registrará incorrectamente la dirección IP del proxy como la dirección IP del cliente, a menos que se configure trust proxy.

TipoValor
Booleano

Si es true, la dirección IP del cliente se entiende como la entrada más a la izquierda en la cabecera X-Forwarded-*.

Si es false, la aplicación se entiende como orientada directamente a Internet, y la dirección IP del cliente se obtiene de req.connection.remoteAddress. Este es el valor predeterminado.

Direcciones IP

Una dirección IP, una subred o una matriz de direcciones IP y subredes de confianza. La lista siguiente muestra los nombres de subred preconfigurados:

  • 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

Puede establecer direcciones IP de varias formas:

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

Cuando se especifican, las direcciones IP o las subredes se excluyen del proceso de determinación de direcciones, y la dirección IP no de confianza más próxima al servidor de aplicaciones se establece como la dirección IP del cliente.

Número

Confíe en la porción n entre el origen y el destino del servidor proxy accesible externamente como el cliente.

Función

Implementación de confianza personalizada. Utilícela sólo si sabe lo que está haciendo.

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

Si establece un valor de trust proxy distinto de false, se producen tres cambios importantes:

El valor trust proxy se implementa utilizando el paquete proxy-addr. Para obtener más información, consulte su documentación.