兰色精灵 发表于 2015-1-14 20:27:20

给大家带来nginx代办署理 猎取不到客户真个实在IP成绩

欢迎大家来到仓酷云论坛!在Linux情况下,使用了Nginx的强势―反向代办署理,了局招致用request.getRemoteAddr()猎取的IP均为公司的代办署理办事器的IP,日记纪录严峻禁绝确!
  人人都晓得在办事器端猎取客户真个IP地点的***是:request.getRemoteAddr(),这类***在年夜局部情形下都是无效的。
可是在经由过程了Nginx,Squid等反向代办署理软件就不克不及猎取到客户真个实在IP地点了。
假如利用了反向代办署理软件,比方将http://192.168.101.88:80/的URL反向代办署理为http://pay.kedou.com/的URL时,用request.getRemoteAddr()***猎取的IP地点是:127.0.0.1 或 192.168.101.88,而并非客户真个实在IP。
  本来是client端间接哀求办事端,走A线路哀求,这时候候经由过程request.getRemoteAddr()***能够筹办的猎取客户真个IP。可是做了代办署理以后呢,client端不是间接哀求办事端,而是走B线路哀求代办署理办事器,由代办署理器往哀求办事端,这时候候办事端经由过程request.getRemoteAddr()***拿到的天经地义是
代办署理办事器的地点了。
 经由代办署理今后,因为在客户端和办事之间增添了两头层,因而办事器没法间接拿到客户真个IP,办事器端使用也没法间接经由过程转发哀求的地点前往给客户端。可是在转发哀求的HTTP头信息中,增添了X-FORWARDED-FOR信息。用以跟踪原本的客户端IP地点和本来客户端哀求的办事器地点。当我们会见http://pay.kedou.comindex.htm/时,实在并非我们扫瞄器真正会见到了办事器上的index.htm/文件,而是先由代办署理办事器往会见http://192.168.101.88:80/index.htm,代办署理办事器再将会见到的了局前往给我们的扫瞄器,由于是代办署理办事器往会见index.htm的,以是index.htm中经由过程request.getRemoteAddr()的***猎取的IP实践上是代办署理办事器的地点,并非客户真个IP地点。
因而可得出取得客户端实在IP地点的
***一:  publicStringgetRemortIP(HttpServletRequestrequest){if(request.getHeader(”x-forwarded-for”)==null){returnrequest.getRemoteAddr();  }returnrequest.getHeader(”x-forwarded-for”);  但是当我会见http://pay.kedou.comindex.htm/时,前往的IP地点一直是unknown,也并非如上所示的127.0.0.1 或 192.168.101.88了因而可得出取得客户端实在IP地点的

***二:  publicStringgetIpAddr(HttpServletRequestrequest){  Stringip=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.getRemoteAddr();  }returnip;  }

但是,假如经由过程了多级反向代办署理的话,X-Forwarded-For的值其实不止一个,而是一串Ip值,事实哪一个才是真实的用户真个实在IP呢?
  谜底是取X-Forwarded-For中第一个非unknown的无效IP字符串。
  如:
  X-Forwarded-For:192.168.101.88,192.168.101.128,192.168.101.126
  用户实在IP为:192.168.101.88  因而猎取终极版代码  //猎取客户端IP地点,撑持代办署理办事器  publicstaticStringgetIpAddress(HttpServletRequestrequest){  Stringip=request.getHeader("x-forwarded-for");  StringlocalIP="127.0.0.1";  if((ip==null)||(ip.length()==0)||(ip.equalsIgnoreCase(localIP))||"unknown".equalsIgnoreCase(ip)){  ip=request.getHeader("Proxy-Client-IP");  }if((ip==null)||(ip.length()==0)||(ip.equalsIgnoreCase(localIP))||"unknown".equalsIgnoreCase(ip)){  ip=request.getHeader("WL-Proxy-Client-IP");  }if((ip==null)||(ip.length()==0)||(ip.equalsIgnoreCase(localIP))||"unknown".equalsIgnoreCase(ip)){  ip=request.getRemoteAddr();  }returnip;  }



如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的好朋友们!

灵魂腐蚀 发表于 2015-1-16 18:14:26

给大家带来nginx代办署理 猎取不到客户真个实在IP成绩

Linux最大的特点就是其开源性,这一点是十分难得的,这也是它能够存在到现在的原因之一。

简单生活 发表于 2015-1-23 05:40:18

虽然大家都比较喜欢漂亮的mm,但是在学 linux 的过程中,还是要多和“男人”接触一下:P 遇到问题的时候,出来看说和上网查之外,就是要多用 linux 下的 man 命令找找帮助。

海妖 发表于 2015-1-31 16:28:18

如果你想深入学习Linux,看不懂因为文档实在是太难了。写的最好的、最全面的文档都是英语写的,最先发布的技术信息也都是用英语写的。

山那边是海 发表于 2015-2-6 22:54:39

尽量不要提问纯属是扯蛋.学习Linux特别是自己一个人初学入手的时候没人教很困难.当然如果可以的话平时多去买些Linux书...对学习Linux很有帮助.

冷月葬花魂 发表于 2015-2-19 07:11:41

有疑问前,知识学习前,先用搜索。

小女巫 发表于 2015-3-6 14:12:12

随着IT从业人员越来越多,理论上会有更多的人使用Linux,可以肯定,Linux在以后这多时间不会消失。

透明 发表于 2015-3-13 03:09:45

Linux?最大的优点在于其作为服务器的强大功能,同时支持多种应用程序及开发工具,所以Linux操作系统有着广泛的应用空间。

第二个灵魂 发表于 2015-3-20 11:49:47

上课传授的不仅仅是知识,更重要的是一些道理,包括一些做人的道理,讲课时也抓住重点,循序渐进,让同学理解很快;更可贵的是不以你过去的成绩看问题.
页: [1]
查看完整版本: 给大家带来nginx代办署理 猎取不到客户真个实在IP成绩