Свойство NLog aspnet-request-ip регистрирует только IP-адрес балансировщика нагрузки. - PullRequest
1 голос
/ 25 октября 2019

Я использую NLog для регистрации. Мне нужно войти в IP-адрес пользователя, который открывает сайт.

Для этих целей я использую свойство aspnet-request-ip NLog. Документация здесь: https://github.com/NLog/NLog/wiki/AspNet-Request-IP-Layout-Renderer

Мой макет в конфигурации NLog прямо сейчас выглядит следующим образом:

layout='"${longdate:universalTime=true}","${level}",${aspnet-request-ip},"${message}"'

Проблема в том, что зарегистрированный IP-адрес - это IP-адрес компьютеракоторый размещает сайт. Но мне нужен IP-адрес пользователя, который открывает / запрашивает сайт. Мне нужно войти, с какого IP-адреса веб-сайт запрошен / открыт.

Как я могу это сделать? Или почему aspnet-request-ip регистрирует IP-адрес хоста вместо IP-адреса пользователя / клиента?

1 Ответ

2 голосов
/ 26 октября 2019

Если вы используете балансировщик нагрузки (в данном случае), IP-адрес запроса будет IP-адресом балансировщика нагрузки. По сути, вы получаете запрос балансировщика нагрузки, так что это IP-адрес отправителя.

Итак, в этом случае вам нужно:

${aspnet-request-ip:CheckForwardedForHeader=true}

Получит IP-адрес заголовка X-Forwarded-For, который является стандартом де-факто для отправки клиентских IP-адресов с помощью балансировщика нагрузки. ,См. X-Forwarded-For для MDN

Заголовок X-Forwarded-For (XFF) является де-факто стандартным заголовком для идентификации исходного IP-адреса клиента, подключающегосяна веб-сервер через HTTP-прокси или балансировщик нагрузки. Когда трафик перехватывается между клиентами и серверами, журналы доступа к серверу содержат только IP-адрес прокси или балансировщика нагрузки. Чтобы увидеть исходный IP-адрес клиента, используется заголовок запроса X-Forwarded-For.

Примечание: не включайте CheckForwardedForHeader для случаев без нагрузки, так как пользователь может отправитьIP, отправив этот заголовок.

См. Документы

...