.net core 使用代理服务器nginx 获取IP或者URL问题(.net core 怎么获取客户端ip,怎么获取nginx ip)

6 篇文章 0 订阅

一、.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/linux-nginx?view=aspnetcore-2.2#configure-nginx

  https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/proxy-load-balancer?view=aspnetcore-2.2

 

 ———来自原创 风吹蛋蛋飘~

 

  • 2
    点赞
  • 6
    收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:技术工厂 设计师:CSDN官方博客 返回首页
评论 2

打赏作者

风吹蛋蛋飘~

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值