.net core 使用代理服務器nginx 獲取IP或者URL問題(.net core 怎麼獲取客戶端ip,怎麼獲取nginx ip)

一、.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

 

 ———來自原創 風吹蛋蛋飄~

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章