给大家带来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教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的好朋友们!
给大家带来nginx代办署理 猎取不到客户真个实在IP成绩
Linux最大的特点就是其开源性,这一点是十分难得的,这也是它能够存在到现在的原因之一。 虽然大家都比较喜欢漂亮的mm,但是在学 linux 的过程中,还是要多和“男人”接触一下:P 遇到问题的时候,出来看说和上网查之外,就是要多用 linux 下的 man 命令找找帮助。 如果你想深入学习Linux,看不懂因为文档实在是太难了。写的最好的、最全面的文档都是英语写的,最先发布的技术信息也都是用英语写的。 尽量不要提问纯属是扯蛋.学习Linux特别是自己一个人初学入手的时候没人教很困难.当然如果可以的话平时多去买些Linux书...对学习Linux很有帮助. 有疑问前,知识学习前,先用搜索。 随着IT从业人员越来越多,理论上会有更多的人使用Linux,可以肯定,Linux在以后这多时间不会消失。 Linux?最大的优点在于其作为服务器的强大功能,同时支持多种应用程序及开发工具,所以Linux操作系统有着广泛的应用空间。 上课传授的不仅仅是知识,更重要的是一些道理,包括一些做人的道理,讲课时也抓住重点,循序渐进,让同学理解很快;更可贵的是不以你过去的成绩看问题.
页:
[1]