ngx_http_realip_module模块

realip模块作用:当本机的nginx处于反向代理的后端时可以获取到用户的真实ip。可以让accesslog记录用户真实IP地址。

set_real_ip_from IP1;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
  • 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(XFF)和X-Real-IP、Remote Address

XFF位于HTTP请求头,是HTTP的扩展header,已经是事实上的标准。

X-Forwarded-For用于表示HTTP请求端真实IP。

格式如下:

X-Forwarded-For: client, proxy1, proxy2

nginx代理一般配置

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; #不合理,nginx之前的代理信息都被抹掉

说明:

1、X-Forwarded-For:最后一节是nginx追加上去的,但前面部分来源于nginx收到的请求头,这部分内容完全不可信。符合IP格式的才可以使用,否则容易引发XSS或者SQL注入漏洞。

2、Remote Address:HTTP协议没有IP的概念,Remote Address来自于TCP连接,表示与服务端建立TCP连接的设备IP,因此,Remote Address无法伪造。

3、X-Real-IP:HTTP代理用于表示与它产生TCP连接的设备IP,可能是其他代理,也可能是真正的请求端。

结论:

1、直接对外提供服务的web应用,在进行与安全有关的操作的时候,只能通过Remote Address获取IP,不能相信任何请求头。

2、使用nginx等web server进行反向代理的web应用,要使用X-Forwarded-For的最后一节或者 X-Real-IP来获取IP,同时还应该进行web应用直接对外提供服务。

3、在与安全无关的场景,可以通过 X-Forwarded-For的靠前位置获取IP,但是需要校验IP的合法性。

nginx的ngx_http_realip_module模块和http头X-Forwarded-For、X-Real-IP的更多相关文章

  1. nginx利用geo模块做限速白名单以及geo实现全局负载均衡的操作记录

    geo指令使用ngx_http_geo_module模块提供的.默认情况下,nginx有加载这个模块,除非人为的 --without-http_geo_module.ngx_http_geo_modu ...

  2. nginx上传模块nginx_upload_module和nginx_uploadprogress_module模块进度显示,如何传递GET参数等。

    ownload:http://www.grid.net.ru/nginx/download/nginx_upload_module-2.2.0.tar.gzconfigure and make : . ...

  3. nginx源代码分析--模块分类

    ngx-modules Nginx 基本的模块大致能够分为四类: handler – 协同完毕client请求的处理.产生响应数据.比方模块, ngx_http_rewrite_module, ngx ...

  4. Nginx HTTP 核心模块

    原文链接:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=17238776&id=2982697aio 语法:aio [ ...

  5. Nginx配置文件及模块解析

    一.Nginx是什么? Nginx是一个基于c语言开发的高性能http服务器及反向代理服务器.由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5万并发链接,并且cpu.内 ...

  6. Nginx range filter模块数字错误漏洞修复 (Nginx平滑升级) 【转】

    对线上生产环境服务器进行漏洞扫描, 发现有两台前置机器存在Nginx range filter模块数字错误漏洞, 当使用nginx标准模块时,攻击者可以通过发送包含恶意构造range域的header ...

  7. Nginx range filter模块数字错误漏洞修复 (Nginx平滑升级)

    对线上生产环境服务器进行漏洞扫描, 发现有两台前置机器存在Nginx range filter模块数字错误漏洞, 当使用nginx标准模块时,攻击者可以通过发送包含恶意构造range域的header ...

  8. nginx內建模块使用

    目录 nginx內建模块使用 1. 內建模块的引入 1.1 查看安装信息 1.2 重新指定配置信息 2. 內建模块的使用 2.1 http_stub_status_module 2.2 http_ra ...

  9. (转)nginx利用geo模块做限速白名单以及geo实现全局负载均衡的操作记录

    nginx利用geo模块做限速白名单以及geo实现全局负载均衡的操作记录 原文:http://www.cnblogs.com/kevingrace/p/6165572.html Nginx的geo模块 ...

随机推荐

  1. laravel5.5 __construct函数 无法使用session() 解决方法和实例

    从网上查询资料得知,在laravel中使用__construct方法的时候,session还没开启,此时就需要用到中间件来解决. $this->middleware(function ($req ...

  2. Mybatis-generator生成Service和Controller

    好久记录笔记,这段时间做政府的项目,数据录入系统基本都是通过excel导入,且数据量大,许多也是单表的录入,这就有很多可以通用的代码,如controller,service层的那一套都是可以代码生成, ...

  3. MySQL 设计规范

    一.数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名 ...

  4. MyBatis源码解析【8】简单demo理解接口式编程

    前言 这个分类比较连续,如果这里看不懂,或者第一次看,请回顾之前的博客 http://www.cnblogs.com/linkstar/category/1027239.html 上一次我们经过源码的 ...

  5. docker push 出现:x509: certificate signed by unknown authority

    今天,部署生产的程序的时候,出现一个问题:编译正常,但是,docker 把编译好的image 推送到生产环境上去的时候,出现:x509: certificate signed by unknown a ...

  6. js常用面试题整理

    1.array操作关键字: pop() 删除最后一个:push最后添加一个或者多个:reverse颠倒数组:shift删除第一个元素:unshift首部添加元素:concat衔接两个数组:join把数 ...

  7. ARM常用汇编指令列表 --- 转自百度文库

  8. Vue 动态加载组件

    为什么要动态加载呢?而不是一次性加载呢? 一次性?你能保证你拿的内容不多,那从性能方面说还是OK的.否则,就该什么时候用,就什么时候取. 得出这想法,源于前几天上班赶产品的故事: A组件是父亲,B组件 ...

  9. [PHP] 算法-找出两个链表的第一个公共结点的PHP实现

    输入两个链表,找出它们的第一个公共结点 1.两个单链表,有公共结点,那么必然,尾部公用 2.找出链表1的长度,找出链表2的长度,长的链表减去短的链表得出一个n值 3.长的链表先走n步,两个链表再同时移 ...

  10. 【nginx】详细配置说明

    ———————————————————————相关文章———————————————————————————— Centos之安装Nginx及注意事项 [Linux]nginx常用命令 ——————— ...