当前位置: 首页 > 编程笔记 >

Nginx基础学习之realip模块的使用方法

符鸣
2023-03-14
本文向大家介绍Nginx基础学习之realip模块的使用方法,包括了Nginx基础学习之realip模块的使用方法的使用技巧和注意事项,需要的朋友参考一下

前言

nginx模块分为两种,官方和第三方,我们通过命令 nginx -V 查看 nginx安装信息,可以看到 下面有关 --with的nginx启动加载的模块信息。

realip模块

用途 :当本机 Nginx 处于反向代理后端时可以获取到用户的 真实IP地址 。

使用 : realip 功能需要 Nginx 添加 ngx_http_realip_module 模块,默认情况下是不被编译,如果需要添加,请在编译时添加 --with-http_realip_module 选项开启它。

realip 作用域

set_real_ip_from 、 real_ip_header 和 real_ip_recursive 都可以用于 http 、 server 、 location 区域配置。

realip 部分参数解释

  • set_real_ip_from :设置反向代理服务器,即信任服务器IP
  • real_ip_header X-Forwarded-For :用户真实IP存在 X-Forwarded-For 请求头中
  • real_ip_recursive :
    • off :会将 real_ip_header 指定的HTTP头中的最后一个IP作为真实IP
    • on :会将 real_ip_header 指定的HTTP头中的最后一个不是信任服务器的IP当成真实IP

http 头中的 X-Forwarded-For、X-Real-IP、Remote Address 解释

X-Forwarded-For 位于HTTP请求头,是HTTP的扩展 header ,用于表示HTTP请求端 真实IP 。

格式如下:

X-Forwarded-For: client, proxy1, proxy2

Nginx 代理一般配置为:

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

解释:

  • X-Forwarded-For :Nginx追加上去的,但前面部分来源于nginx收到的请求头,这部分内容不是 很可信 。符合IP格式的才可以使用,否则容易引发 XSS 或者 SQL注入漏洞 。
  • Remote Address :HTTP协议没有IP的概念, Remote Address 来自于TCP连接,表示与服务端建立TCP连接的设备IP,因此,Remote Address无法伪造。
  • X-Real-IP :HTTP代理用于表示与它产生TCP连接的设备IP,可能是其他代理,也可能是真正的请求端。

realip 功能举例说明

下面是一个简单的架构图:

假设一:

1、如果 Nginx 没有使用 realip模块 ,第二台 Nginx中 X-Forwarded-For 请求是 1.1.1.1,但 remote_addr 地址是 2.2.2.2,这时应用服务可以通过 X-Forwarded-For 字段获取用户真实IP。不过这里有点风险,如果中间多几层反向代理服务,就无法获取唯一一个用户真实IP。

2、如果 Nginx 使用 realip模块 ,并如下设置;Nginx 会取 X-Forwarded-For 最后一个IP也就是 2.2.2.2 作为真实IP。最后应用服务拿到的地址也是 2.2.2.2,但事实这不是用户IP。

set_real_ip_from 2.2.2.2;
set_real_ip_from 2.2.2.3; 
real_ip_header X-Forwarded-For; 
real_ip_recursive off;

3、如果 Nginx 使用 realip模块 ,并如下设置;由于 2.2.2.2 是信任服务器IP,Nginx 会继续往前查找,发现 1.1.1.1 不是信任服务器IP,就认为是真实IP。但事实 1.1.1.1 也就是用户IP。最后应用服务也拿到唯一的用户真实IP。

set_real_ip_from 2.2.2.2;
set_real_ip_from 2.2.2.3; 
real_ip_header X-Forwarded-For; 
real_ip_recursive on;

总结

到此这篇关于Nginx基础学习之realip模块的使用方法就介绍到这了,更多相关Nginx realip模块使用内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!

 类似资料:
  • 本文向大家介绍asp.net基础学习之控件的使用方法,包括了asp.net基础学习之控件的使用方法的使用技巧和注意事项,需要的朋友参考一下 本文为大家分享了asp.net控件的使用方法,供大家参考,具体内容如下 1.asp.net页面插入c#代码 事先声明: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.c

  • 本文向大家介绍Python学习之time模块的基本使用,包括了Python学习之time模块的基本使用的使用技巧和注意事项,需要的朋友参考一下 前言 在我们学习的过程中,肯定会用到各种各样的模块。所以今天我们从time模块开始学习 首先我们在使用某个模块的时候,肯定要先导入这个模块  而当我们想看看这个模块是干什么的,我们可以使用help函数来看  那么接下来我们挨个来看看 1. time.tim

  • 本文向大家介绍Laravel学习基础之migrate的使用教程,包括了Laravel学习基础之migrate的使用教程的使用技巧和注意事项,需要的朋友参考一下 前言 大家都知道,现在的开发测试都是讲究多人团队协作完成,每个人都有本地环境,在以前我们一般是手动的添加数据,比如在数据库查询器中使用sql语句进行数据插入。如果数据较少,那还是蛮轻松的,但是如果数据过大,那就很蛋疼了,但是这在Larave

  • 本文向大家介绍Swift学习教程之SQLite的基础使用,包括了Swift学习教程之SQLite的基础使用的使用技巧和注意事项,需要的朋友参考一下 前言 在我们的日常开发中,经常会遇到用户断网或者网络较慢的情况,这样用户在一进入页面的时候会显示空白的页面,那么如何避免没网显示空白页面的尴尬呢?答案就是:先在网络好的时候缓存一部分数据,这样当下次网络情况不好的时候,至少用户可以先看到之前缓存的内容,

  • 本文向大家介绍Oracle基础学习之子查询,包括了Oracle基础学习之子查询的使用技巧和注意事项,需要的朋友参考一下 首先使用子查询的时候注意事项包括,子查询可以嵌套多层和子查询需要圆括号()括起来,下面我们来看看详细的介绍。 基础介绍 1,wherer:子查询一般会返回单行单列 单行多列 多行单列 ; 2,having:子查询会返回单行单列,同时表示要使用统计函数; 3,from:子查询返回多

  • 本文向大家介绍seajs学习教程之基础篇,包括了seajs学习教程之基础篇的使用技巧和注意事项,需要的朋友参考一下 介绍 众所周知前端开发模块化已经是大势所趋,目前模块化的规范有很多,众所周知的有commonJS,Module/Wrappings和AMD等,而且ES6也着手开始制定模块化机制的实现。类似于c/c++的include,java中的import关键字,在js中也定义了require关键