转载自:https://blog.51cto.com/wjw7702/1150225

一、概述

如今利用nginx做反向代理和负载均衡的实例已经很多了,针对不同的应用场合,还有很多需要注意的地方,本文要说的就是在通过CDN后到达nginx做反向代理和负载均衡时请求头中的“X-Forwarded-For”项到底发生了什么变化。

二、简单web架构图

三、X-Forwarded-For的定义:

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

四、依照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 参数设置:

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或者干脆不设置!

转载于:https://blog.51cto.com/kusorz/2369407

Nginx做反向代理和负载均衡时“X-Forwarded-For”信息头的处理相关推荐

  1. 使用nginx做反向代理和负载均衡效果图

    连续请求nginx服务器,响应如图: 参考文章:https://segmentfault.com/a/1190000007495181 转载于:https://www.cnblogs.com/NBev ...

  2. Nginx之反向代理与负载均衡实现动静分离实战

    Nginx之反向代理与负载均衡实现动静分离实战 什么是反向代理与负载均衡 Nginx仅仅作为Nginx  proxy反向代理使用的,因为这个反向代理功能表现的效果是负载均衡集群的效果. 负载均衡指的是 ...

  3. Windos环境用Nginx配置反向代理和负载均衡

    Windos环境用Nginx配置反向代理和负载均衡 引言:在前后端分离架构下,难免会遇到跨域问题.目前的解决方案大致有JSONP,反向代理,CORS这三种方式.JSONP兼容性良好,最大的缺点是只支持 ...

  4. 【网络编程】多个服务器的情况:nginx实现反向代理、nginx基于反向代理实现负载均衡

    如果我们有多个服务器,比如我们只有一个域名:我们可以利用其中一台服务器,通过nginx为这一个域名实现反向代理:进一步,我们可以利用这多台服务器,为这一个域名基于nginx的反向代理实现负载均衡. 文 ...

  5. nginx的反向代理及负载均衡

    查看内核版本号: uname  -r 查看Linux发行版本 :cat /etc/issue 或cat /etc/release 查看bash 版本 : bash  --version <?xm ...

  6. nginx的反向代理以及负载均衡模块的使用

    内容: 1.何为代理 2.nginx的反向代理模块以及使用 3.nginx的负载均衡模块以及使用 一.何为代理 代理,由字面意思可以理解为代为服务的是意思. 代理服务技术是一门很古老的技术,是在互联网 ...

  7. nginx(三)反向代理和负载均衡

    nginx(三)反向代理和负载均衡 正向代理概念:比如在学校要上网,在学校内网是一个内网ip,需要连上公网就需要一个正向代理服务器. 反向代理概念: 看下图(Nginx只做请求的转发,后台有多个htt ...

  8. Nginx-从零开始使用nginx实现反向代理及负载均衡

    文章目录 环境说明 安装Nginx 安装必须的依赖库 3个 源码安装 yum安装 安装nginx 启动Nginx 常用操作命令 使用非root用户启动nginx 搭建应用 Nginx 做反向代理 + ...

  9. nginx实现反向代理及负载均衡

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u013144287/article/details/78551398 一.反向代理 1.什么是反向代 ...

最新文章

  1. 魂力真的存在那么该如何提高魂力呢
  2. 中科院aibench_中科院发布目标追踪数据集,万条视频,150万个边界框 | 快来下载...
  3. Cortex-M3内核中的异常
  4. python编程100行_自己动手写100行Python代码抢火车票!
  5. 常用计算机类型包括个人计算机,网络教育统考《计算机应用基础》多媒体技术模拟题(二)...
  6. cmd窗口设置charset
  7. c 运行js脚本语言,Javascript脚本语言
  8. dlp防泄密系统卸载_怎样做好数据防泄密?奥赛系统早知道
  9. 雅马哈php mt7,雅马哈专业录音室监听耳机 HPH-MT7 正式发售!
  10. 163邮箱:退信代码(对照表) - 说明篇
  11. Linux 7 关闭、禁用防火墙服务
  12. OCP 12c最新考试原题及答案(071-7)
  13. PHP微信小程序生成带参二维码getwxacodeunlimit
  14. Android闹钟TimePicker,android – TimePicker getHours(),API 15中的getMinutes
  15. cookie的保存 jq,如何使用jQuery读取Cookie并将其存储在变量中?
  16. 如何创建GOOGLE ADS的MCC经理账户,有什么好处?
  17. 在x86下交叉编译mips程序
  18. 求解矩阵特征值的QR算法
  19. java jws web_基于Jws的WebService项目
  20. Tsunami: A Learned Multi-dimensional Index for Correlated Data and SkewedWorkloads(VLDB21)

热门文章

  1. MySQL判断中文字符的方法(转)
  2. sysv-rc-conf管理Ubuntu server开机启动服务
  3. 机器学习工具在数据中心的应用与发展
  4. python学习之面向对象学习进阶
  5. 在CentOS7上实现NFS共享
  6. [转]Newtonsoft.Json高级用法
  7. ZOJ 1013 Great Equipment(DP)
  8. 架构师到底是啥玩意?
  9. CISA:警惕俄罗斯 “Sandworm” 黑客组织使用的新型恶意软件框架
  10. Hey! 首先祝贺 SpaceX 发射成功,其次我黑了 NASA 某IT 承包商网络哟~