1、X-Forwarded-For的定义:

X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项。它不是RFC中定义的标准请求头信息,在squid缓存代理服务器开发文档中可以找到该项的详细介绍。
标准格式如下:
X-Forwarded-For: client1, proxy1, proxy2
从标准格式可以看出,X-Forwarded-For头信息可以有多个,中间用逗号分隔,第一项为真实的客户端ip,剩下的就是曾经经过的代理或负载均衡的ip地址,经过几个就会出现几个。

2、依照WEB架构图进行分析

按照上图的Web架构图,可以很容易的看出,当用户请求经过CDN后到达Nginx负载均衡服务器时,其X-Forwarded-For头信息应该为 客户端IP,CDN的IP 但实际情况并非如此,一般情况下CDN服务商为了自身安全考虑会将这个信息做些改动,只保留客户端IP。我们可以通过php程序获得X-Forwarded-For信息或者通过Nginx的add header方法来设置返回头来查看。

下面来分析请求头到达Nginx负载均衡服务器的情况;在默认情况下,Nginx并不会对X-Forwarded-For头做任何的处理,除非用户使用proxy_set_header 参数设置:

  1. proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

$proxy_add_x_forwarded_for变量包含客户端请求头中的"X-Forwarded-For",与$remote_addr用逗号分开,如果没有"X-Forwarded-For" 请求头,则$proxy_add_x_forwarded_for等于$remote_addr。$remote_addr变量的值是客户端的IP。

当Nginx设置X-Forwarded-For于$proxy_add_x_forwarded_for后会有两种情况发生:

1、如果从CDN过来的请求没有设置X-Forwarded-For头(通常这种事情不会发生),而到了我们这里Nginx设置将其设置为$proxy_add_x_forwarded_for的话,X-Forwarded-For的信息应该为CDN的IP,因为相对于Nginx负载均衡来说客户端即为CDN,这样的话,后端的web程序时死活也获得不了真实用户的IP的。

2、CDN设置了X-Forwarded-For,我们这里又设置了一次,且值为$proxy_add_x_forwarded_for的话,那么X-Forwarded-For的内容变成 ”客户端IP,Nginx负载均衡服务器IP“如果是这种情况的话,那后端的程序通过X-Forwarded-For获得客户端IP,则取逗号分隔的第一项即可。

如上两点所说,如果我们知道了CDN设置了X-Forwarded-For信息,且只有客户端真实的IP的话,那么我们的Nginx负载均衡服务器可以不必理会该头,让它默认即可。

其实Nginx中还有一个$http_x_forwarded_for变量,这个变量中保存的内容就是请求中的X-Forwarded-For信息。

如果后端获得X-Forwarded-For信息的程序兼容性不好的话(没有考虑到X-Forwarded-For含有多个IP的情况),最好就不要将X-Forwarded-For设置为 $proxy_add_x_forwarded_for。

应该设置为$http_x_forwarded_for 或者干脆不设置!

原文: http://wjw7702.blog.51cto.com/5210820/1150225 ,这里转载仅学习使用。

Nginx X-Forwarded-For 和 $proxy_add_x_forwarded_for 的意思相关推荐

  1. 使用nginx后如何在web应用中获取用户ip及原理解释

    http://www.iteye.com/topic/1124492 问题背景: 在实际应用中,我们可能需要获取用户的ip地址,比如做异地登陆的判断,或者统计ip访问次数等,通常情况下我们使用requ ...

  2. nginx 获取真实ip

    问题背景: 在实际应用中,我们可能需要获取用户的ip地址,比如做异地登陆的判断,或者统计ip访问次数等,通常情况下我们使用request.getRemoteAddr()就可以获取到客户端ip,但是当我 ...

  3. nginx反向代理+缓存开启+url重写+负载均衡(带健康探测)的部署记录

    在日常运维工作中,运维人员会时常使用到nginx的反向代理,负载均衡以及缓存等功能来优化web服务性能. 废话不多说,下面对测试环境下的nginx反向代理+缓存开启+url重写+负载均衡(带健康探测) ...

  4. nginx反向代理模块配置详解_nginx反向代理配置详解

    反向代理配置 修改部署目录下conf子目录的nginx.conf文件(如/opt/nginx/conf/nginx.conf)内容,可调整相关配置. 将默认配置里面带#号注释内容去掉 grep -v ...

  5. Nginx 获取客户端真实IP $remote_addr与X-Forwarded-For

    nginx配置 首先,一个请求肯定是可以分为请求头和请求体的,而我们客户端的IP地址信息一般都是存储在请求头里的.如果你的服务器有用Nginx做负载均衡的话,你需要在你的location里面配置X-R ...

  6. Nginx 细说proxy_set_header $remote_addr和X-Forwarded-For

    先来看下proxy_set_header的语法 语法: proxy_set_header field value; 默认值: proxy_set_header Host $proxy_host; pr ...

  7. Nginx获取客户端真实ip

    三.如何在使用代理后获取用户ip 在<实战nginx>中,有这么一句话: 经过反向代理后,由于在客户端和web服务器之间增加了中间层,因此web服务器无法直接拿到客户端的ip,通过$rem ...

  8. nginx X-Forwarded-For头伪造漏洞及防范

    nginx 防止X-Forwarded-For头伪造漏洞及防范 1 漏洞描述 2 修复建议 3 修复过程 4 验证结果 1 漏洞描述 X-Forwarded-For 作为 HTTP 请求的扩展头,在请 ...

  9. Nginx常见场景代理转发配置

    注意:本文出自 "阿飞"的博客 ,如果要转载本文章,请与作者联系! 并注明来源: Nginx常见场景代理转发配置_阿飞的专栏-CSDN博客_nginx 代理转发配置 在这里分享的不 ...

  10. 网络服务之nginx详解

    差异对比 APACHE NGINX 配置繁琐 配置相对简单 原生支持动态和静态页面 支持静态页面 模块相对安全 高性能模块出产迅速.社区活跃 BUG 相对较少,消耗资源较多 BUG相对较多,节省资源 ...

最新文章

  1. Oracle 原理:UNDO表空间
  2. mysql 取出全部数据库_php取出mysql数据库中所有数据
  3. 第四代Express框架koa简介
  4. Verilog HDL语言实现的单周期CPU设计(全部代码及其注释)
  5. 吕玉琴考研指导电子版_【干货大放送】中国历代文学作品选阅读指导PDF
  6. 【CodeForces - 987C 】Three displays (dp,最长上升子序列类问题,三元组问题)
  7. Java Integer 对象的比较
  8. 网页设计与制作 项目教程 项目1
  9. 图形学基础——伽马校正
  10. python如何求平方_python中求平方
  11. bzoj4556(sam)
  12. 系统性谈谈软件可靠性——第1讲:软件可靠性基础概念
  13. 浙江省软考报名时间成绩查询浙江省教育考试院浙江省人事考试网报名入口
  14. pip不是内部 pycharm_解决'pip' 不是内部或外部命令,也不是可运行的程序或批处理文件的问题...
  15. CryptoJS的hmac-sha1算法使用(转base64)——2022.11.18
  16. 【报告分享】2020吃货人群图鉴-Mob研究院(附下载)
  17. SOCKS代理的定义
  18. 什么是Subject
  19. [Python Tips] 从list中选择”除某个特定元素之外“的值
  20. VSCode图片无法显示(已解决)

热门文章

  1. Oracle数据库:逻辑运算and,or,not和各种运算的优先级控制
  2. Elastic App Search 快速构建 ES 应用
  3. 调速器方案(智能数字显示),可做6W~250W的单相电机数显智能调速器
  4. PTA 天梯赛 7-41 PAT排名汇总 (25 point(s))
  5. 不借助第三方变量交换两个变量的值(多种方法)
  6. 论文格式修改技巧-公式与字不在同一行
  7. Win10内核驱动强制签名,申请沃通 EV代码签名证书
  8. 使用RustDesk或者AnyDesk的TCP隧道实现Codesys系列PLC的远程调试和下载
  9. L3-021 神坛 (30 分) 计算几何
  10. Lieb格子上SU(3)Hubbard模型铁磁的基态