Узнаем IP адрес клиента в C# ASP.NET Core MVC находясь за прокси-сервером


Опубликовано 26.04.2019 22:34 | Автор: Admin

В данной статье рассматривается:
Наша проблема заключается в том, что наш WEB сервер работает через прокси-сервер и узнать реальный IP клиента не совсем тривиальная задача. Попробуем решить возникшую трудность.



Пишу больше для себя как памятка

Основной ресурс где все расписано подробно

Чтоб корректно распознавать IP адрес клиента, находясь за прокси на поможет заголовок X-Forwarded-For (XFF)

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

Я в работе использую Nginx и все настройки буду приводить для работы в связки с ним.

Если вы все настраивали по инструкции по развертыванию ASP.NET Core на Linux, то вносить изменения в Nginx нам не придется. Наша конфигурация должна выглядеть примерно так:


server {
    listen        80;
    server_name   example.com *.example.com;
    location / {
        proxy_pass         http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

Т.е. у нас должна присутствовать вот эта запись proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; если она есть, то наш прокси будет заполнять заголовок реальным IP клиента.

Как получить данный заголовок в C# ASP.NET Core MVC

Нам необходимо в Startup.cs нашего проекта внести некоторый правки.


public void ConfigureServices(IServiceCollection services)
{
    services.Configure(options =>
    {
        options.ForwardedHeaders = 
            ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
    });
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseForwardedHeaders();

}
После внесения изменений для получение реального IP нам необходимо сделать вызов в удобном нам месте.
string ip = HttpContext.Connection.RemoteIpAddress.ToString();

Метки
.Net Core C# nginx WEB Linux

Комментариев: 0

 39 |


Добавить комментарий:
Отправить