Nginx极客时间:postread阶段:获取真实客户端地址的realip模块

1. realip 模块:

realip模块 可以帮助我们获取真实的用户IP地址,这为后面的限速、限流等功能提供了可能性。



2. Nginx如何拿到浏览器客户端的真实IP地址?

在这里插入图片描述

其实从TCP连接的四元组中是可以拿到对端的IP地址和端口号的,但是问题在于,真实的网络中存在大量的反向代理和一些网络设备如交换机、路由器,所以与Nginx直接通过TCP进行连接的客户端往往并不是浏览器客户端,而是类似CDN等的设备。

为了将浏览器客户端的IP地址传递给Nginx服务器,HTTP头部中提供了 X-Forwarded-ForX-Real_IP 这两个变量用于传递IP,二者的区别在于 X-Real-IP只能存储一个,而 X-Forwarded-For 可以存储多个。



3. 拿到真实用户IP后如何使用?

在这里插入图片描述


基于变量!!!!

realip模块 会用 HTTP头部中的 X-Forwarded-For 和 X-Real-IP 的值 去覆盖 变量 binary_remote_addrremote_addr 的值(在被 realip模块 处理之前,这两个变量存储的值是直接与Nginx连接的客户端的地址),

所以这也是为什么 limit_conn 模块一定要在 PREACCESS 阶段,而不能在 POST_READ 阶段 的原因,因为只有对真实的客户端IP 做连接限制 才有意义。



4. 关于 realip 模块:

在这里插入图片描述

  1. realip模块 默认不会编译进Nginx,需要通过 --with-http_realip_module 启用功能;(所以必须通过下载Nginx源代码的方式,yum安装是无法实现的)
  2. realip模块 提供了另外两个变量:realip_remote_addrrealip_remote_port,用以获取直接与Nginx相连接的客户端的IP和端口号;(原本的 remote_addr 和 remote_port 中的值已被真实浏览器客户端的值覆盖)
  3. realip模块提供了三个指令:

在这里插入图片描述

set_real_ip_from  address | CIDR | unix;
# 用于设置realip模块 对于哪些TCP连接的source ip,才会去做替换remote_addr
# 一般把它设置成与Nginx直接相连的客户端的IP地址,只有通过它转发过来的HTTP请求才会被realip解析出真正的客户端地址
# 指令参数的类型有多种,可以是 address、CIDR、unix 任一种

在这里插入图片描述

real_ip_header  field | X-Real-IP | X-Forwarded-For | proxy_protocol;
# 用于设置realip模块 要从哪个字段中去取真实客户端的地址,包括 field、X-Real-IP、X-Forwarded-For、proxy_protocol
# 默认为 X-Real-IP
# 如果是从 X-Forwarded-For 中取真实客户端的地址,因为其中有多个IP地址,会取最后一个IP地址

在这里插入图片描述

real_ip_recursive  on | off;
# 环回地址
# 默认关闭
  1. realip模块的核心功能:修改客户端地址。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值