Java口试-怎样获取客户端真实IP
副问题[/!--empirenews.page--]
在举办一些小游戏开拓时,我们常常较量存眷的一个成果即是分享。针对分享,我们但愿能按照各个都市可能地域,能有差异的分享文案,辨识地域的成果假如由处事器来完成的话,我们就必要知道客户端的真实IP。本日我们就来看看处事器是怎样获取到客户端的真实IP的。 nginx设置 起首,一个哀求必定是可以分为哀求头和哀求体的,而我们客户端的IP地点信息一样平常都是存储在哀求头里的。假如你的处事器有效Nginx做负载平衡的话,你必要在你的location内里设置X-Real-IP和X-Forwarded-For哀求头:
1. X-Real-IP 在《拭魅战nginx》中,有这么一句话: 这句话的意思是说,当你行使了nginx反向处事器后,在web端行使request.getRemoteAddr()(本质上就是获取$remote_addr),取得的是nginx的地点,即$remote_addr变量中封装的是nginx的地点,虽然是没法得到用户的真实ip的。可是,nginx是可以得到用户的真实ip的,也就是说nginx行使$remote_addr变量时得到的是用户的真实ip,假如我们想要在web端得到用户的真实ip,就必需在nginx里作一个赋值操纵,即我在上面的设置:
2. X-Forwarded-For X-Forwarded-For变量,这是一个squid开拓的,用于辨认通过HTTP署理或负载均衡器原始IP一个毗连到Web处事器的客户机地点的非rfc尺度,假若有做X-Forwarded-For配置的话,每次颠末proxy转发城市有记录,名目就是client1,proxy1,proxy2以逗号离隔各个地点,因为它长短rfc尺度,以是默认是没有的,必要逼迫添加。在默认环境下颠末proxy转发的哀求,在后端看来长途地点都是proxy端的ip 。也就是说在默认环境下我们行使request.getAttribute("X-Forwarded-For")获取不到用户的ip,假如我们想要通过这个变量得到用户的ip,我们必要本身在nginx添加设置:
意思是增进一个$proxy_add_x_forwarded_for到X-Forwarded-For里去,留意是增进,而不是包围,虽然因为默认的X-Forwarded-For值是空的,以是我们总感受X-Forwarded-For的值就便是$proxy_add_x_forwarded_for的值,现实被骗你搭建两台nginx在差异的ip上,而且都行使了这段设置,那你会发此刻web处事器端通过request.getAttribute("X-Forwarded-For")得到的将会是客户端ip和第一台nginx的ip。 3. 那么$proxy_add_x_forwarded_for又是什么? $proxy_add_x_forwarded_for变量包括客户端哀求头中的X-Forwarded-For与$remote_addr两部门,他们之间用逗号分隔。 举个例子,有一个web应用,在它之前通过了两个nginx转发,www.linuxidc.com即用户会见该web通过两台nginx。 在第一台nginx中,行使:
此刻的$proxy_add_x_forwarded_for变量的X-Forwarded-For部门是空的,以是只有$remote_addr,而$remote_addr的值是用户的ip,于是赋值往后,X-Forwarded-For变量的值就是用户的真实的ip地点了。 到了第二台nginx,行使:
此刻的$proxy_add_x_forwarded_for变量,X-Forwarded-For部门包括的是用户的真实ip,$remote_addr部门的值是上一台nginx的ip地点,于是通过这个赋值往后此刻的X-Forwarded-For的值就酿成了“用户的真实ip,第一台nginx的ip”,这样就清晰了吧。 处事器获取真实IP 代码为:
(编辑:河北网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |