一、.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
———来自原创 风吹蛋蛋飘~