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. [EXP]Microsoft Windows MSHTML Engine - "Edit" Remote Code Execution

    # Exploit Title: Microsoft Windows (CVE-2019-0541) MSHTML Engine "Edit" Remote Code Execut ...

  2. (转)Linux 系统设置 : dmesg 命令详解

    原文:https://blog.csdn.net/yexiangCSDN/article/details/80683246 https://www.cnblogs.com/duanxz/p/34770 ...

  3. spring cloud(断路器——初学五)

    Feign使用Hystrix 因为feign已经依赖了hystrix,所以可以直接使用,无需添加再次添加依赖. 1.使用@FeignClient注解中的fallback属性指定回调类 package ...

  4. spring cloud(断路器——初学四)

    在分布式架构中,当某个服务单元发生故障后,能通过断路器的故障监控,向调用方返回一个错误响应,而不是长时间的等待. Netflix Hystrix 在Spring Cloud中使用了Hystrix 来实 ...

  5. Consul内部分享ppt

    Consul 是一个支持多数据中心,分布式,高可用的服务发现和配置共享系统.由 HashiCorp 公司使用 Go 语言开发,基于Raft协议.部署起来非常容易,只需要极少的可执行程序和配置文件,具有 ...

  6. Android应用系列:手把手教你做一个小米通讯录(附图附源码)

    前言 最近心血来潮,突然想搞点仿制品玩玩,很不幸小米成为我苦逼的第一个试验品.既然雷布斯的MIUI挺受欢迎的(本人就是其的屌丝用户),所以就拿其中的一些小功能做一些小demo来玩玩.小米的通讯录大家估 ...

  7. MyBatis源码解析【7】接口式编程

    前言 这个分类比较连续,如果这里看不懂,或者第一次看,请回顾之前的博客 http://www.cnblogs.com/linkstar/category/1027239.html 修改例子 在我们实际 ...

  8. 构建Docker Compose服务堆栈

    1.安装了docker-compose,现在我们要使用docker-compose来运行容器栈.这个地方会有两个容器,一个容器中使用Flask搭建的简单应用,另一个容器是Redis,Flash会向re ...

  9. 【详解】Spring Security 之 SecurityContext

    前言 本文主要整理一下SecurityContext的存储方式. SecurityContext接口 顾名思义,安全上下文.即存储认证授权的相关信息,实际上就是存储"当前用户"账号 ...

  10. javascript的作用域和优先级

    变量的作用域是在定义时决定的,不是在运行时活动对象是在运行时决定的?如果就创建一个对象,使用完毕就完了,就使用json字面量的方式如果对象被反复创建,反复使用,就使用自定义的构造函数方式优先级内部变量 ...