zoukankan      html  css  js  c++  java
  • .Net Core/Framework之Nginx*后获取客户端IP等数据探索

      公司项目最近出现获取访问域名、端口、IP错误现象,通过排查发现, 之前项目一直通过Nginx自定义Headers信息来获取,但最近运维人员失误操作造成自定义Header信息丢失,造成项目拿不到对应的数据。思前想后,想找找官方有没有关于此类问题通用标准化的解决方案。

    一、Nginx配置如下:

    proxy_redirect             off;
    proxy_set_header         Host             $host;
    proxy_set_header        X-Real-IP         $remote_addr;
    proxy_set_header        X-Forwarded-For    $proxy_add_x_forwarded_for;
    proxy_set_header    X-Forwarded-Proto $scheme;
    proxy_set_header   Upgrade $http_upgrade;
    proxy_set_header   Connection keep-alive;
    proxy_cache_bypass $http_upgrade;
    client_max_body_size     10m;
    client_body_buffer_size 128k;
    proxy_connect_timeout     90;
    proxy_send_timeout         90;
    proxy_read_timeout         90;
    proxy_buffers            32 4k;

     

    二、.Net Framework Headers 转接头替换方案

    在web.congfig文件中通过配置aspnet:UseHostHeaderForRequestUrl解决:

    1 <appSettings>
    2    <add key="aspnet:UseHostHeaderForRequestUrl" value="true"/>
    3 </appSettings>

    三、.Net Core Header 转接头替换方案

    Startup.cs 中 Configure 函数 添加如下配置

    1 app.UseForwardedHeaders(new ForwardedHeadersOptions
    2 {
    3     ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
    4 });

     

    通过上面的配置后发现通过 HttpContext.Current.Connection.RemoteIpAddress 还是获取不到代理前的数据,仔细读了官方文档后发现,此配置只对Nginx与项目同时部署在同一台server(本机localhost)时有效,多台server需在项目中配置代理的IP地址才能有效的替换转接头信息,代码如下: 

    app.UseForwardedHeaders(new ForwardedHeadersOptions
    {
        ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto,
        KnownProxies = { IPAddress.Parse("172.17.0.0") }
    });

    也可通过KnownNetworks属性配置代理地址范围。官方文档地址: 点击这里

      自此该问题已完美解决,有了标准化的配置方案,减少技术人员更替对项目的不熟造成的一些失误。

  • 相关阅读:
    JavaScript模态对话框类
    事件模块的演变(1)
    html5中可通过document.head获取head元素
    How to search for just a specific file type in Visual Studio code?
    What do 'lazy' and 'greedy' mean in the context of regular expressions?
    正则非获取匹配 Lookahead and Lookbehind ZeroLength Assertions
    regex length 正则长度问题
    Inversion of Control vs Dependency Injection
    How to return View with QueryString in ASP.NET MVC 2?
    今天才发现Google Reader
  • 原文地址:https://www.cnblogs.com/niao/p/10305953.html
Copyright © 2011-2022 走看看