博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nginx反向代理获取用户真实ip
阅读量:7030 次
发布时间:2019-06-28

本文共 1383 字,大约阅读时间需要 4 分钟。

  hot3.png

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();}

参考

转载于:https://my.oschina.net/yysue/blog/2221374

你可能感兴趣的文章
多个请求统一更新界面
查看>>
illuminate/routing 源码分析之注册路由
查看>>
网易公共技术Java研发工程师面经(offer)
查看>>
说说如何在登录页实现生成验证码功能
查看>>
笔记-softmax、softmax loss
查看>>
FastDFS蛋疼的集群和负载均衡(六)之Nginx高可用集群
查看>>
C语言入门经典读书笔记----第十一章 结构化数据
查看>>
Apache Thrift系列详解(二) - 网络服务模型
查看>>
chrome devtools使用详解——Performance
查看>>
了解一下ES6: 解构赋值&字符串
查看>>
7 - 在 Django Admin 后台发布文章
查看>>
SpringBoot+Mybatis+ Druid+PageHelper 实现多数据源并分页
查看>>
Umeng第三方登录
查看>>
EggBorn.js:一款顶级Javascript全栈开发框架
查看>>
前端开始的那件事——表单
查看>>
【前端】HTML属性
查看>>
js 算法3
查看>>
【Java 容器面试题】谈谈你对HashMap 的理解
查看>>
分组圆角TableView
查看>>
高级Java研发者在解决大数据问题上的一些技巧
查看>>