Обучение по Express и Node.js от StrongLoop

Этот перевод обеспечивается StrongLoop / IBM.

Этот документ может быть устаревшим по отношению к документации на английском языке. Последние обновления содержатся в документации на английском языке.

Express за прокси

При запуске приложения Express за прокси-сервером, необходимо указать (с помощью app.set()) для переменной приложения trust proxy одно из значений, приведенных в таблице ниже.

Хотя приложение будет запущено и без указания значения переменной приложения trust proxy, отсутствие заданного значения trust proxy приведет к некорректной регистрации IP-адреса прокси в качестве клиентского IP-адреса.

ТипЗначение
Булевский

Если указано значение true, клиентским IP-адресом считается первая слева запись в заголовке X-Forwarded-*.

Если указано значение false, приложение считается имеющим прямой выход в Интернет, и IP-адрес клиента будет производным от req.connection.remoteAddress. Это значение используется по умолчанию.

IP-адреса

IP-адрес, подсеть или массив IP-адресов и подсетей, считающихся надежными. В приведенном ниже списке перечислены предварительно заданные имена подсетей:

  • 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

IP-адреса можно задать любым из указанных ниже способов:

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

Если IP-адреса или подсети указаны, они исключаются из процесса определения адреса, и незащищенный IP-адрес, ближайший к серверу приложений, будет определен как IP-адрес клиента.

Число

Считать защищенным n-й элемент пути от прокси-сервера со стороны клиента, в качестве клиента.

Функция

Реализация нестандартного механизма защиты. Используйте этот метод, только если вы уверены в своих знаниях.

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

Установка значения, отличного от false, для trust proxy ведет к трем существенным изменениям:

Параметр trust proxy реализуется с помощью пакета proxy-addr. Дополнительная информация приведена в документации к нему.