首页 > 系统相关 >获取nginx转发前的真实ip

获取nginx转发前的真实ip

时间:2023-06-06 18:02:19浏览次数:41  
标签:nginx ip 转发 request unknown equalsIgnoreCase length IP


有时,需要获取客户端真实ip,但由于nginx转发后,已经不是真实ip地址

解决方式如下:在你的nginx配置下加上如下配置即可

location /{
  
        proxy_pass http://127.0.0.1:8080;//转发到你的业务服务器服务器
        proxy_set_header x-forwarded-for  $remote_addr;//把真实ip设置到请求头里面

      }

主要是:

proxy_set_header x-forwarded-for  $remote_addr;//把真实ip设置到请求头里面

说明:

REMOTE_ADDR

表示发出请求的远程主机的 IP 地址,remote_addr代表客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的,当你的浏览器访问某个网站时,假设中间没有任何代理,那么网站的web服务器Nginx,Apache等)就会把remote_addr设为你的机器IP,如果你用了某个代理,那么你的浏览器会先访问这个代理,然后再由这个代理转发到网站,这样web服务器就会把remote_addr设为这台代理机器的IP

x_forwarded_for

简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项,正如上面所述,当你使用了代理时,web服务器就不知道你的真实IP了,为了避免这个情况,代理服务器通常会增加一个叫做x_forwarded_for的头信息,把连接它的客户端IP(即你的上网机器IP)加到这个头信息里,这样就能保证网站的web服务器能获取到真实IP

二、服务端java方式获取ip代码:

public static String getClientIpAddr(HttpServletRequest request) {
        String ip = request.getHeader("X-Forwarded-For");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_X_FORWARDED");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_X_CLUSTER_CLIENT_IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_CLIENT_IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_FORWARDED_FOR");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_FORWARDED");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_VIA");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("REMOTE_ADDR");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        return ip;

 

标签:nginx,ip,转发,request,unknown,equalsIgnoreCase,length,IP
From: https://blog.51cto.com/u_16152740/6426763

相关文章

  • eclipse中gitee拉取项目:cannot open git-upload-pack
    检查本地是否有设置代理,关掉代理试试:......
  • 修改ip接口的跃点数
    title:修改网络配置的InterfaceMetriccategories:-OS-Windows-批处理使用脚本修改网卡跃点数InterfaceMetric使用到的接口Get-NetIPInterfaceSet-NetIPInterfaceGet-NetAdapter需求描述需要修改当前跃点数为1的ip接口,修改其跃点数为90解决方案......
  • javasecript 生成 从2022年到当前季度的所以季度,排倒序
    javasecript 生成从2022年到当前季度的所以季度,排倒序 functiongetQuarter(year,quarter){returnyear+"年"+quarter+"季度";}functiongenerateQuarters(){varcurrentYear=newDate().getFullYear();varcurrentQuarter=Math.floor((......
  • C# MemoryStream转GZipStream 到文件
    压缩:publicstaticvoidMemoryStreamCompress(stringfileName,MemoryStreammemStream){FileStreamfsWrite=File.OpenWrite(fileName);byte[]bytes=newbyte[1*1024*1024];GZipStreamcompressedzipStream=......
  • VBScript教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介VBScript是VisualBasicScript的简称,即VisualBasic脚本语言,有时也被缩写为VBS。它是一种微软环境下的轻量级的解释型语言,它使用COM组件、WMI、WSH、ADSI访问系统中的元素,对系统进行管理。同时它又是asp动态网页默认的编程语言,配合asp内建对象和ADO对象,用户很快就能掌握......
  • 代码随想录算法训练营第二十八天|93. 复原 IP 地址
    【参考链接】93.复原IP地址【注意】1.切割问题就可以使用回溯搜索法把所有可能性搜出来。2.startIndex一定是需要的,因为不能重复分割,记录下一层递归分割的起始位置。3.本题我们还需要一个变量pointNum,记录添加逗点的数量。4.分割的段数作为终止条件。pointNum表示逗点数......
  • How do you display code snippets in MS Word preserving format and syntax highlig
    HowdoyoudisplaycodesnippetsinMSWordpreservingformatandsyntaxhighlighting?回答1Hereisthebestway,forme,toaddcodeinsideword:GotoInserttab,Textsection,clickObjectbutton(it'sontheright)ChooseOpenDocumentTextwhic......
  • 最完美WIN11_Pro_22H2.22631.1830软件选装纯净版VIP41.9
    【系统简介】=============================================================1.本次更新母盘来自UUP_WIN11_PRO_22H2.22631.1830。进一步精简优化调整。2.只为呈现最好的作品,手工精简优化部分较多。3.OS版本号为22631.1830。个别要求高的就下MSDN吧,里面啥功能都有。4.集成《DrvCeo......
  • nginx 工作过程| 如何启动
    http://nginx.org/en/docs/beginners_guide.html配置文件改变之后,不起作用reload之后:如果配置文件正确,则会开启新的worker,并通知旧的结束手头的工作。(头:你们干完手里的就撤,不要接新活儿)如果配置文件不正确,则忽略,继续指导旧的工作。 CentOS6.5执行/usr/sbin/nginx即可......
  • nginx 和 php
     如果访问index.php那么一定要includefastcgi.conf(是相对路径,这点要注意)举例:location~\.php${fastcgi_pass127.0.0.1:9000;includefastcgi.conf;} ......