深入理解nginx realip模块[上]

目录

  • 1. 引言
  • 2. Real IP模块的使用
    • 2.1 启用Real IP模块
    • 2.2 配置Real IP模块
      • 2.2.1 配置指令
      • 2.2.2 举例
  • 3. 变量的使用

1. 引言

  nginx 的 Real IP 模块用于解决代理服务器转发请求到nginx上时可能出现的 IP 地址问题。因为当 PROXY收到客户端的请求时,它会通过自己的IP与nginx服务器连接并转发请求。这会导致在nginx应用程序中记录的 IP 地址是代理服务器的地址,而不是实际客户端的地址。

  举例如下图:
在这里插入图片描述

  当nginx收到来自客户端的HTTP请求,由于经过了中间的代理PROXY服务器,NGINX默认只能知道请求来自PROXY的内网IP 192.168.0.1,而不是客户端的真实IP 111.22.33.44。因此,需要一种机制能够让NGINX获取到客户端的真实IP,好在HTTP协议可以通过X-Forwarded-For头或者X-Real-IP头将客户端的真实IP透传到后端,在这个例子中,当PROXY收到请求后,它会在客户端的请求头中增加一个带有客户端IP的X-Forwarded-For头或者X-Real-IP头,然后转发给后端的NGINX服务器,NGINX服务器要根据约定从对应的HTTP请求头中获取客户端的真实IP。

  Real IP 模块的使命就是将代理服务器传递的真实客户端 IP 地址还原为实际客户端的 IP 地址,以便nginx中的应用模块可以获取到真实的客户端IP。

  本文首先介绍Real IP 模块的使用和配置,然后通过对Real IP 模块的源码分析来深入理解其实现的机理。

2. Real IP模块的使用

2.1 启用Real IP模块

   ngx_http_realip_module默认是没有enable的,因此,需要在configure的时候将这个模块enable,如下:

./configure --with-http_realip_module

2.2 配置Real IP模块

2.2.1 配置指令

1. real_ip_header配置指令

语  法:	
        real_ip_header field | X-Real-IP | X-Forwarded-For | proxy_protocol;
默认值:	
        real_ip_header X-Real-IP;
上下文:	
        http, server, location

  本指令用来定义从哪个地方获取客户端的真实IP,以便让NGINX能够获取到,并将获取到的客户端真实IP替换代理服务器的IP。

  其中的选项包括 X-Real-IP 头, X-Forwarded-For 头,或者自定义HTTP 头都可以。另外,还支持通过proxy_protocol协议来获取客户端的真实IP,当然,要使用这个选项,首先需要在nginx上开启proxy_protocol的功能。

2. real_ip_recursive配置指令

语  法:	
        real_ip_recursive on | off;
默认值:	
        real_ip_recursive off;
上下文:	
        http, server, location

  本指令用来开启或者关闭通过HTTP相关头获取客户端真实IP的时候是否允许多级代理的情况。

  如果禁用递归搜索,与受信任地址之一匹配的原始客户端地址将被请求头字段中由 real_ip_header 指令定义的最后一个地址替换。如果启用递归搜索,与受信任地址之一匹配的原始客户端地址将被请求头字段中最后一个非受信任地址替换。

3. set_real_ip_from配置指令

  定义一个或者多个受信任的PROXY服务器的地址,格式如下:

语  法:	
        set_real_ip_from address | CIDR | unix:;
默认值:	
        —
上下文:	
        http, server, location

   set_real_ip_from指令可以定义多次,定义的PROXY服务器地址可以用ip/mask的方式指定(即CIDR),也可以用域名的方式指定,还可以指定为”unix:“用来表示信任所有以unix socket形式建立的连接。

  举个例子,如下:

set_real_ip_from 192.168.0.0/24;
set_real_ip_from unix:
set_real_ip_from www.test_proxy.com;

2.2.2 举例

  先举一个例子:

http {
    # ...
    real_ip_header X-Forwarded-For;
    real_ip_recursive on;
    # ...
}

  以上例子开启了Real IP功能,nginx将查找X-Forwarded-For头来获取客户端真实IP。

3. 变量的使用

  本模块在获取到客户端的真实IP后,它会将与它连接的IP地址替换为客户端真实IP,当然有时候我们还是需要得到PROXY的IP和端口,那么nginx也提供相应的机制来获得,即通过变量的方式来提供这个信息。包括两个变量如下:

  • $realip_remote_addr: PROXY的IP地址

  • realip_remote_port: PROXY与nginx连接的PROXY本地端口号

<未完待续>

下文将以源代码的角度来分析real ip模块的实现原理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/522280.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ZS卧式不锈钢离心泵

一、结构与设计特点ZS卧式不锈钢离心泵是一种高效能、耐腐蚀的泵类设备&#xff0c;其核心结构包括电机、泵体、叶轮、轴封和底座等部分。泵体采用优质不锈钢材料&#xff0c;确保了良好的耐蚀性和强度&#xff0c;同时&#xff0c;流道设计优化&#xff0c;减少了流动损失&…

961: 进制转换问

【学习版】 【C语言】 #include<iostream>struct SeqList {int top;int len;int* s; };void initStack(SeqList* stack, int len) {stack->s new int[len];stack->top -1;stack->len len; }void push(SeqList* stack, int x) {stack->s[stack->top] …

Docker中Mysql报 mbind: Operation not permitted

问题 我们在docker中安装的mysql运行时报 mbind: Operation not permitted mbind: Operation not permitted mbind: Operation not permitted mbind: Operation not permitted mbind: Operation not permitted mbind: Operation not permitted原因 这是Docker的Seccomp安全限…

大语言模型上下文窗口初探(上)

由于篇幅原因&#xff0c;本文分为上下两篇&#xff0c;上篇主要讲解上下文窗口的概念、在LLM中的重要性&#xff0c;下篇主要讲解长文本能否成为LLM的护城河、国外大厂对长文本的态度。 1、什么是上下文窗口&#xff1f; 上下文窗口&#xff08;context window&#xff09;是…

MySQL操作DDL

目录 1.概述 2.数据库的增删改查 3.表的增删改查 3.1.创建和查看表结构 3.2.修改表 3.3.查看所有的表 3.4.删除表 4.用户 5.DDL在实际应用场景中的作用 5.1.数据库设计 5.2.数据库维护 ​​​​​​​5.3.数据库迁移或重置 ​​​​​​​5.4.优化性能 ​​​​​…

若依 ruoyi-vue 接口挂载获取Resources静态资源文件权限校验

解决小程序图片打包过大&#xff0c;放置后端&#xff0c;不引用ngnix、minio等组件&#xff0c;还能进行权限校验 package com.huida.web.controller.common.app;import com.huida.common.core.controller.BaseController; import com.huida.common.utils.file.FileUtils; imp…

C语言——#define的使用

#define定义常量 基本语法 #define name stuff //&#xff08;#define&#xff09;&#xff08;变量名&#xff09;&#xff08;定义的数值&#xff09; 这里记得&#xff0c;是不加分号的 定义常量&#xff08;这里 就要涉及我们经常说的宏定义&#xff09; 定义常量的使…

enqueue:oracle锁机制

实现锁的方式就是排队咯&#xff0c;那么排队就是有enqueue这么个结构来管理 管理锁的结构叫队列&#xff0c;即enqueue 所有和enqueue相关的函数都叫KSQ-- kernal service enqueue lock是从应用层面看到的锁&#xff0c;enqueue是oracle内部管理锁的一个结构。 可以用v$lock_…

复现ChatGLM-6B

ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。 项目代码https://github.com/THUDM/ChatGLM-6B 权重开放:…

【已解决】ZIP压缩文件如何设置密码?

ZIP是常用的压缩格式之一&#xff0c;对于重要的ZIP文件&#xff0c;我们还可设置密码保护&#xff0c;那ZIP压缩文件怎么设置密码呢&#xff1f;不清楚的小伙伴一起来看看吧&#xff01; 给ZIP文件设置密码&#xff0c;我们需要用到支持ZIP格式的解压缩软件&#xff0c;比如7…

备战蓝桥杯---数论相关问题

目录 一、最大公约数和最小公倍数 二、素数判断 三、同余 四、唯一分解定理 五、约数个数定理 六、约数和定理 五、快速幂 六、费马小定理 七、逆元 一、最大公约数和最小公倍数 文章链接&#xff1a;最大公约数和最小公倍数 二、素数判断 文章链接&#xff1a;在J…

壁纸小程序Vu3(预览页面:弹窗)

1.展示跳转后的分类列表图片 classlist.vue <template><view class"classlist"><view class"content"><navigator class"item" v-for"item in 10"><image src"../../common/images/64.png" mode…

进口非洲鲜花为春节增姿添彩

发布时间&#xff1a;2023-01-16 文章来源&#xff1a;海关总署 图为&#xff1a;关员对进口鲜花实施查验作业 1月12日上午&#xff0c;3000枝产自肯尼亚的鲜花搭乘“内罗毕-长沙”CZ6044航班抵达长沙机场口岸。该批鲜花全部为玫瑰&#xff0c;包括花园玫瑰、奥斯…

Linux网卡IP地址配置错误的影响

在Linux系统中&#xff0c;网络配置是保持系统顺畅运行的关键一环。正确配置网卡的IP地址对于确保网络通信的准确性和效率至关重要。然而&#xff0c;如果在这个过程中发生错误&#xff0c;可能会带来一系列问题。让我们一起探讨一下&#xff0c;如果Linux网卡的IP地址配置错误…

RocketMQ的简单使用

这里需要创建2.x版本的springboot项目 导入依赖 <dependencies><dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.3</version></dependency>&…

ChromeOS 中自启动 Fcitx5 和托盘 stalonetray

ChromeOS 更新的飞快&#xff0c;旧文章的方法也老是不好用&#xff0c;找遍了也没找到很好的可以开机自启动 Linux VM 和输入法、托盘的方法。 研究了一下&#xff08;不&#xff0c;是很久&#xff09;&#xff0c;终于找到个丑陋的实现。 方法基于 ChromeOS 123.0.6312.94…

带刻度透明PFA量筒耐强酸碱耐高温全氟烷氧基树脂量具

PFA量筒为上下等粗的直筒状&#xff0c;特氟龙量杯是上大下小的圆台形&#xff0c;底座均有宽台设计&#xff0c;保证稳定性&#xff0c;两者均可在实验室中作为定量量取液体的量具&#xff0c;上沿一侧有弧嘴设计&#xff0c;便于流畅地倾倒液体。 规格参考&#xff1a;5ml、…

蓝桥杯每日一题:公约数(gcd)

题目描述&#xff1a; 给定两个正整数 a 和 b。 你需要回答 q 个询问。 每个询问给定两个整数 l,r&#xff0c;你需要找到最大的整数 x&#xff0c;满足&#xff1a; x 是 a和 b 的公约数。l≤x≤r。 输入格式 第一行包含两个整数 a,b。 第二行包含一个整数 q。 接下来…

理解Go语言中的并发和并行

即使有多年的并发编程经验,有些开发人员也可能无法清楚地理解并发(concurrency)和并行(parallelism)之间的区别。下面我们以一个真实的例子来说明:一家咖啡店。 在这家咖啡店中,一名服务员负责接收订单并使用一台咖啡机进行准备。顾客下订单,然后等待他们的咖啡。 …

Gateway是什么?(SpringCloudAlibaba组件)

1、网关介绍 **网关(Gateway)又称网间连接器、协议转换器。网关在传输层上以实现网络互连&#xff0c;是最复杂的网络互连设备&#xff0c;仅用于两个高层协议不同的网络互连。**网关的结构也和路由器类似&#xff0c;不同的是互连层。网关既可以用于广域网互连&#xff0c;也可…