Пишу больше для себя как памятка
Основной ресурс где все расписано подробно
Чтоб корректно распознавать 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 клиента.
Нам необходимо в 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();
Спасибо. Очень статья помогла.