Nginx 反向代理下拿到客户端的真实IP - Go语言中文社区

Nginx 反向代理下拿到客户端的真实IP


        

      前段时间在做AOP的Log记录的时候需要拿到用户的真实ip   然后一直拿不到用户的真实ip 拿到的一直是Nginx 上的ip地址 才知道在Nginx 经过反向代理后是拿不到真实的ip地址的 在没有经过Nginx 反向代理 之前 直接使用  request.getRemoteAddr() 拿到客户端的真实ip在大多情况都是Ok 的 

      但是现在有了反向代理后 就需要对code 做一些处理   都知道Nginx 是一个转发代理服务器的中间件  所以服务器无法直接拿到客户端的ip服务器端应用也无法直接通过转发请求的地址返回给客户端。也就是当我们在访问xx.jsp/时,其实并不是我们浏览器真正访问到了服务器上的xx.jsp 文件,而是先由代理服务器去访问xx.jsp ,代理服务器再将访问到的结果返回给我们的浏览器,因为是代理服务器去访问xx.jsp的,所以xx.jsp中通过 request.getRemoteAddr()的方法获取的IP实际上是代理服务器的地址,并不是客户端的IP地址。 

   在经过强大的百度后原来在转发请求的HTTP头部信息中 增加了X-FORWARDED-FOR信息。用以跟踪 原有的客户端IP地址和原来客户端请求的服务器地址。

那就可以得到客户端的真实ip

public String getRemortIP(HttpServletRequest request) { 
if (request.getHeader("x-forwarded-for") == null) { 
return request.getRemoteAddr();
}
return request.getHeader("x-forwarded-for");

这也是一种方法

第二种方法就是

当在经过多级的反向代理后 X-FORWARDED-FOR 的值不只一个而是一串ip 值

这时候也不去确定那个是有效的ip  可以直接取X-FORWARDED-FOR中第一个非unknown 的有效Ip字符串




  这样就行了 

然后在修改写Nginx 的Nginx.conf 配置文件


 location / {
   
         proxy_set_header   Host             $host;
         proxy_set_header   X-Real-IP        $remote_addr;
         proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

         } 

 把这些加进去就可以 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/Zps_258147/article/details/78665027
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-05-07 22:28:03
  • 阅读 ( 1375 )
  • 分类:Go Web框架

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢