网站首页 > 精选教程 正文
简介
在使用 nginx 做反向代理时,后端要获取到客户端 IP,需要在 nginx 上设置对应的配置。
设置转发请求头
设置 HTTP 请求头中的 X-Forwarded-For,X-Real-IP
...
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://127.0.0.1:8080;
}
...
X-Real-IP 如果有多层转发,只要在第一层设置就可以了,防止变量被覆盖。 X-Forwarded-For 由于取前一个的值,相当于经过 nginx 代理就会追加一个 IP,只要获取第一个就是真实的客户端 IP。
后端获取
- 先获取 X-Real-IP
- 如果获取不到 X-Real-IP,通过 X-Forwarded-For 取
- 如果再取不到,就直接取 remote_addr
nginx 配置 X-Forwarded-For 的风险
用户可以通过自己设置请求头来伪造 ip。
比如在发起 http 请求时设置请求头 x-forwarded-for:1.1.1.1。
那么服务器通过 x-forwarded-for 获取到的第一个 ip 就是用户伪造的 ip。
防止伪造方案
- 在只有 1 层 nginx 代理的情况下,设置 nginx 配置
proxy_set_header X-Forwarded-For $remote_addr;
此时$remote_addr 获取的是用户的真实 ip
- 在有多层反向代理的情况下设置 最外层 nginx 配置和情况 只有一层代理 一样proxy_set_header X-Forwarded-For $remote_addr; 除了最外层之外的 nginx 配置proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
这样就防止了用户通过伪造请求头来伪造真实 ip。
后台只需要从 x-forwarded-for 请求头中取出第一个 ip 就是用户的真实 ip。
后面如果有多个 ip,就是反向代理的 ip
X-Real-IP
只要 第一层 nginx 代理情况下只需配置即可:
proxy_set_header X-Real-IP $remote_addr;
当有多层反向代理时,只能在最外层代理设置
proxy_set_header X-Real-IP $remote_addr;
如果在非最外层设置,则获取到的是反向代理机器的 ip
猜你喜欢
- 2024-09-24 基于IP地址来申请HTTPS证书
- 2024-09-24 从Apache apisix日志中获取客户端ip
- 2024-09-24 哎,我早就料到你获取IP地址的姿势不对啦!
- 2024-09-24 如何解决ELB和nginx配合使用时无法获取客户端真实IP的问题?
- 2024-09-24 Nginx的Http请求11个阶段之postread阶段:获取真实客户端地址的
- 2024-09-24 负载均衡获得真实源IP的6种方法
- 2024-09-24 java 游戏服务器框架 ioGame 17.1.54 netty nginx 代理获取用户真实ip
- 2024-09-24 IIS 7、8启用nginx代理后日志中获取访客真实IP方法
- 2024-09-24 CDN代理服务器获取访问者真实IP(建议收藏)
- 2024-09-24 Java获取请求者的真实IP地址
你 发表评论:
欢迎- 最近发表
-
- java 服务之间调用(rpc)(java实现服务器)
- Java机器学习库(Java ML)(二、聚类)
- 「Java库」如何使用优秀的加密库Jasypt来保护你的敏感信息?
- GitHub精选 | 轻量级Android和Java日志库
- Java面试官:MySQL binlog 有什么作用?主从延迟的了解么?
- Excel函数核武器库:50个高频场景公式——第二弹
- Excel函数核武器库:50个高频场景公式——第一弹
- Spring Cache高性能缓存库 - Caffeine简介
- Java通过Kafka Streams库来实现数据流处理
- 一连问了好几个大佬,竟然都不知道Redis为什么默认16个数据库?
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)