首页 > 其他分享 >获取客户端ip

获取客户端ip

时间:2023-04-17 16:33:57浏览次数:40  
标签:Forwarded 获取 ip next headers proxy logger 客户端

Nginx中添加配置:

   location / {
       #保留代理之前的host 包含客户端真实的域名和端口号
       proxy_set_header    Host  $host; 
       #保留代理之前的真实客户端ip
       proxy_set_header    X-Real-IP  $remote_addr;  
       #这个Header和X-Real-IP类似,但它在多级代理时会包含真实客户端及中间每个代理服务器的IP
       proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
       #表示客户端真实的协议(http还是https)
       proxy_set_header X-Forwarded-Proto $scheme;
   }

中间件

 public class RemoteAddressMiddleware
    {
        private readonly ILogger<RemoteAddressMiddleware> _logger;
        private readonly RequestDelegate _next;

        public RemoteAddressMiddleware(RequestDelegate next, ILogger<RemoteAddressMiddleware> logger)
        {
            _next = next;
            _logger = logger;
        }

        public Task Invoke(HttpContext context)
        {
            var headers = context.Request.Headers;
            try
            {
                if (headers.ContainsKey("X-Forwarded-For"))
                    context.Connection.RemoteIpAddress = IPAddress.Parse(headers["X-Forwarded-For"].ToString()
                        .Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)[0]);
                if (headers.ContainsKey("X-Forwarded-Proto"))
                    context.Request.Scheme = headers["X-Forwarded-Proto"].ToString();
            }
            catch (Exception ex)
            {
                _logger.LogError($"Handle RemoteAddress Error!MSG:{ex.StackTrace}");
            }
            return _next(context);
        }
    }

添加中间件

app.UseMiddleware<RemoteAddressMiddleware>();

 

标签:Forwarded,获取,ip,next,headers,proxy,logger,客户端
From: https://www.cnblogs.com/dayang12525/p/17326283.html

相关文章

  • JavaScript对象
    JavaScript对象的定义无序属性的集合,其属性可以包含基本值、对象或者函数严格来说对象是一组没有特定顺序的值对象的每个属性或方法都有一个名字,而每个名字都映射到一个值。(可以把对象想象成散列表:一组名值对,其中值可以是数据或函数)......
  • flask信号、flask-script、sqlalchemy介绍和快速使用
    昨日内容回顾#1导出项目依赖pipreqs#2函数和方法的区别#3local对象-并发编程中的一个对象,它可以保证多线程并发访问数据安全-本质原理是:不同的线程,操作的是自己的数据-不支持协程#4自己定义local,支持线程和协程#注意点一:try:......
  • 如何利用 IP 归属地查询 API 精准锁定用户位置
    引言在互联网时代,IP地址扮演着非常重要的角色,它可以帮助我们追踪网站访问者、优化网络服务等等。而IP归属地则更进一步,它可以帮助我们精确地定位IP地址所在的地理位置,为数据分析、网络安全、市场调研等领域提供了极大的帮助。本文将介绍一种IP归属地-IPv4区县级的API,帮......
  • 【sip】SDP举例
    SDP数据v=0o=-2008220082INIP4192.168.4.193s=Mr.Wangc=INIP4192.168.4.193t=31493286003149338600m=audio3456RTP/AVP0345a=rtpmap:0PCMU/8000a=rtpmap:3GSM/8000a=rtpmap:4G723/8000a=rtpmap:5DVI4/8000SDP数据具体描述v=0版本号:0o=hua200823450082INIP419......
  • 如何获取ChatGPT的API keys
    首先,登录openai官网(https://openai.com/)然后,访问这个链接https://platform.openai.com/account/api-keys点击Createnewsecretkey创建key,就ok了箴言:因为这些东西是非常简单的。不要抱怨自己学不会,那是因为你没有足够用心。......
  • [Typescript] Write clean Type 3 - make a wrapper to cleanup generic usages
    Originalcode:import{CSSProperties}from"react";constuseStyled=<TTheme={}>(func:(theme:TTheme)=>CSSProperties)=>{//Imaginethatthisfunctionhooksintoaglobaltheme//andreturnstheCSSPropertiesreturn......
  • EAS_根据bosType或id获取表名,
    privatevoidreviseBack(Contextctx,StringbillId)throwsSQLException{Stringsql="selectt.FSrcObjectIDfromT_BOT_RELATIONtwheret.FDestObjectID='"+billId+"'";StringtableName="";tr......
  • 【sip】带鉴权信息的SIP呼叫
    携带鉴权的SIP呼叫流程图 携带鉴权SIP呼叫流程描述1)主叫1000发起一路呼叫,终端向服务器发送INVITE请求消息。2)代理服务器向终端1000回407响应,表示代理服务器要求终端带上鉴权信息。3)终端1000向服务器发送INVITE消息,并带上鉴权信息。4)代理服务器向终端用户1000回100T......
  • Apache2.4开启GZIP功能
    HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术。大流量的WEB站点常常使用GZIP压缩技术来让用户感受更快的速度。这一般是指WWW服务器中安装的一个功能,当有人来访问这个服务器中的网站时,服务器中的这个功能就将网页内容压缩后传输到来访的电脑浏览器中显示出来.一般对......
  • python s12 day13 JavaScript、Dom和jQuery
    1.JavaScriptJavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处理。1、JavaScript代码存在形式<!--方式一--><scripttype"text/javascript"src="JS文件"></script>......