nginx做反向代理时,默认的配置后端获取到的ip都是来自于nginx,如何转发用户的真实ip到后端程序呢?如是是java后端,用request.getRemoteAddr();获取到的是nginx的ip地址,而不是用户的真实ip.

修改nginx配置,如下:

upstream www.xxx.com {ip_hash;server serving-server1.com:80;server serving-server2.com:80;
}server {listen www.xxx.com:80;server_name www.xxx.com;location / {proxy_pass http://www.xxx.cn;}proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

在原来配置的基础上加入后面的三条指令,就可以用request.getHeader("X-Forwarded-For");获取到访客的ip了.

附:Java获取客户端ip的实现

private static final String[] IP_HEADER_CANDIDATES = {"X-Forwarded-For","Proxy-Client-IP","WL-Proxy-Client-IP","HTTP_X_FORWARDED_FOR","HTTP_X_FORWARDED","HTTP_X_CLUSTER_CLIENT_IP","HTTP_CLIENT_IP","HTTP_FORWARDED_FOR","HTTP_FORWARDED","HTTP_VIA","REMOTE_ADDR" };public static String getClientIpAddress(HttpServletRequest request) {for (String header : IP_HEADER_CANDIDATES) {String ip = request.getHeader(header);if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {int index = ip.indexOf(",");if (index != -1) {return ip.substring(0, index);}return ip;}}return request.getRemoteAddr();
}

参考

  1. nginx反向代理获取用户真实ip
  2. nginx 如何配置来获取用户真实IP
  3. How to get Client IP Address using Java
  4. Getting IP address of client

转载于:https://www.cnblogs.com/okokabcd/p/9722620.html

nginx反向代理获取用户真实ip相关推荐

  1. nginx多层反向代理获取客户端真实ip

    访问路径: 用户 --> www.chinasoft.cn(nginx反向代理) --> www.chinasoft.com(nginx反向代理) --> python服务端程序经过 ...

  2. 穿透代理获取用户真实IP地址

    文章目录 一.场景 二.方法 1.微信官方方法 (1)没有代理 (2)有代理 2.非官方方法 (1)代码 (2)说明 (3)补充 一.场景 在对接微信H5支付API时,有一关键步骤是获取到用户的真实I ...

  3. 使用nginx代理的情况下获取用户真实IP

    ##1.背景知识 1.1. 前提知识点: 还有nginx中的几个变量: remote_addr 代表客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的,当你的浏览器访问某个网站 ...

  4. nginx 如何配置来获取用户真实IP

    ##1.背景知识 1.1. 前提知识点: 还有nginx中的几个变量: remote_addr 代表客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的,当你的浏览器访问某个网站 ...

  5. CDN下nginx获取用户真实IP地址

    为什么80%的码农都做不了架构师?>>>    随着nginx的迅速崛起,越来越多公司将apache更换成nginx. 同时也越来越多人使用nginx作为负载均衡, 并且代理前面可能 ...

  6. java获取用户真实IP地址

    /*** 获取用户真实IP地址,不使用request.getRemoteAddr();的原因是有可能用户使用了代理软件方式避免真实IP地址.* 可是,如果通过了多级反向代理的话,X-Forwarded ...

  7. QQ空间迁移_【群晖NAS+FRP_并获取用户真实IP 支持群辉6.0和群辉7.0】

    群晖NAS+FRP 并获取用户真实IP 2020-11-12 13:57:54 事情的起因是这样的, 我的NAS没有公网IP,通过FRP端口映射到云主机对外提供访问,但是互联网不怀好意的人太多了,经常 ...

  8. PHP获取用户真实IP地址

    PHP获取用户真实IP地址 <?phpfunction getRealIpAddr() { if (!empty($_SERVER['HTTP_CLIENT_IP'])) { $ip=$_SER ...

  9. php获取客户端ip端口,Phpwind获取用户真实IP

    Phpwind获取用户真实IP 使用nat123端口映射后,可能会遇到phpwind网站无法获取用户真实IP的情况,对应解决方法有下. phpwind8.5的方法: 修改 /require/commo ...

最新文章

  1. 彻底解决Webpack打包慢的问题
  2. MATLAB-数据类型
  3. TFS - Team Foundation Server 的安装记录
  4. centos 安装nodejs与vue手脚架安装
  5. 2017.0713.《计算机组成原理》-汉明码
  6. ExtJs4学习(一):正确认识ExtJs4
  7. AlphaGo Zero:从头开始学习
  8. 如何制作一个HTML网页
  9. 【已解决】Remove redundant parentheses等Python错误大全
  10. ARM实现LED灯亮灭
  11. 对接钉钉API语音功能相关文档
  12. 基于WiFi的人体感知
  13. CSS样式书写的三种方式
  14. 什么是UUID 以及UUID的版本
  15. js将汉字转为相应的拼音
  16. 我的Android进阶之旅------四种呼叫转移场景
  17. 「津津乐道播客」#195. 996笼罩下的互联网“民工”
  18. [5GC]5G LAN标准解读
  19. 不等于在python中怎么打_python中不等于怎么表示
  20. scratch lenet(4): 开根号的C语言实现

热门文章

  1. mysql数据库集群备份策略_mysql高可用方案之集群(cluster)
  2. Swagger自动接口文档生成框架————springboot整合swagger总结
  3. 12306能删候补订单记录_「实用」官方“捡漏”神器来了!12306铁路候补购票服务正式上线!...
  4. python外部库是什么_如何使用Portable Python安装外部库?
  5. 记一次win10下pycharm用tensorboard可视化不显示的问题解决
  6. 基于jsp+mysql+mybatis+Spring boot简单学生成绩信息管理系统
  7. 定时器中断实验 编写程序使定时器0或者定时器1工作在方式1,定时50ms触发蜂鸣器。
  8. android 知识点大全,Android基础知识总结(一)
  9. matlab 读取照片imread,利用matlab读取图像
  10. linux c 封装redis,封装hiredis——C++与redis对接(一)(string的SET与GET操作)