zoukankan      html  css  js  c++  java
  • 关于.net core使用nginx做*获取客户端ip的问题

    1、正常情况下.net core获取客户端ip是比较简单的

             /// <summary>
            /// 获取客户Ip
            /// </summary>
            /// <param name = "context" ></ param >
            /// < returns ></ returns >
            public static string GetClientUserIp(this HttpContext context)
            {
                var ip = context.Request.Headers["X-Forwarded-For"].FirstOrDefault();
                if (string.IsNullOrEmpty(ip))
                {
                    ip = context.Connection.RemoteIpAddress.ToString();
                }
    
                return ip;
            }    
    

      通过这样一个方法就能获取到客户端ip。

    2、但是,我在centos下使用nginx代理后,这样指向的就是本地ip了,所以需要将nginx获取到的ip传递到.net core web站点。

    3、首先,我们需要在Startup.cs里添加

    app.UseForwardedHeaders(new ForwardedHeadersOptions
                {
                    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
                });

    然后

    server {
        listen 80;
        location / {
            proxy_pass http://localhost:5000;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection keep-alive;
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }
    }

    这是之前我的nginx配置。

    需要再加上一行

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    最后重启nginx,至此可以获取到客户端ip啦。

  • 相关阅读:
    js中url跳转问题
    代码走查整理总结
    关于前后端分离跨域请求问题
    mysql大小写敏感问题
    初识react
    mysql测试
    关于使用Ajax请求json数据,@RequestMapping返回中文乱码的几种解决办法
    ssm实现分页查询
    js表单验证处理和childNodes 和children 的区别
    javaScript数组操作整理
  • 原文地址:https://www.cnblogs.com/lyps/p/10149996.html
Copyright © 2011-2022 走看看