一、.net core 獲取客戶端IP ,獲取完整URL
C#代碼
string ip = HttpContext.Connection.RemoteIpAddress.ToString();
string url = Request.GetDisplayUrl();
說明:上面兩行代碼我們都知道,但是如果你是使用代理服務器託管.net core網站的,例如nginx,會出現你獲取只是代理服務器IP,而不是真實客戶的IP。
二、解決問題
1.配置nginx 三個轉接頭Host 、X-Forwarded-For、X-Forwarded-Proto
2.重啓nginx 服務器
server {
listen 80;
server_name www.***.com;
add_header X-Frame-Options "SAMEORIGIN"; #保護Nginx 免受點擊劫持的侵害
add_header X-Content-Type-Options "nosniff"; #可阻止大部分瀏覽器通過MIME方式探查來自已聲明內容類型的響應
location / {
proxy_pass http://172.18.0.12:5000;
proxy_set_header Host $host; #配置請求轉接頭1
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #配置請求轉接頭2
proxy_set_header X-Forwarded-Proto $scheme; #配置請求轉接頭3
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
3.在項目Startup.cs 配置(C#代碼)
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
//配置中間件以轉接 X-Forwarded-For 和 X-Forwarded-Proto標頭
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders =
ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
//僅允許受信任的代理和網絡轉接頭。否則,可能會受到 IP 欺騙攻擊
options.KnownProxies.Add(IPAddress.Parse("172.18.0.100"));
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
//啓動配置中間件
app.UseForwardedHeaders();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
...
app.UseMvc();
}
.net core微軟官方文檔地址
https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/proxy-load-balancer?view=aspnetcore-2.2
———來自原創 風吹蛋蛋飄~