首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

X-FORWARDED-FOR测试案例

摘要:

本文对x-forwarded原理进行了讲解,并做了测试。测试中使用了Nginx做负载均衡,通过开启x-forwarded-for特性,观察apache日志输出,验证了apache对x-forwarded-for特性的支持。

x-forwarded-for原理:

在讲解x-forward-for之前,我们先讲解一下代理和反向代理。

代理:比较好理解,首先要有一台代理服务器,客户端通过代理服务器与服务端交换信息的过程可以描述为,首先客户端与代理服务器之间创建连接,然后,通过代理服务器对目标服务器创建连接,获取目标服务器的指定资源。代理服务器可以对目标服务器的资源下载到本地缓存,如果客户端要获取的资源在代理服务器的缓存之中,则代理服务器并不会向服务器发送请求,而是直接返回缓存的资源。通常,由于国内IP访问限制,我们会使用代理服务器去访问国外的web站点。

反向代理:反向代理跟代理正好相反,通常代理是设在客户端,反向代理是架设在服务器端。客户端访问服务器资源时,实际上访问的是反向代理服务器的地址,反向代理服务器再根据代理协议,将客户端请求送给服务端。通常,反向代理可以实现以下好处,隐藏服务器的真实IP地址,做负载均衡(F5,LVS,HAProxy,Nginx通常都会使用反向代理功能),缓存静态内容等。

上面谈到了反向代理,客户端访问的实际上是反向代理服务器发布的IP地址。访问服务器的请求都是通过反向代理服务器发送过来的。那么大家肯定会想到一个问题,根据TCP/IP协议,服务器侧的请求都来从反向代理服务器发送过来的,那么服务器端是否看不到客户端的真实IP地址呢?确实如此,在HTTP协议中,X-Forwarded-For是HTTP的扩展头部,通常在反向代理服务器或负载均衡服务中,会使用该字段来存放访客的真实IP地址。对于反向代理服务器来说,访客的IP地址只有一个真实的无法伪造的,$remote_addr,但是后端服务器看到的$remote_addr是反向代理服务器的IP,因此,在反向代理服务器中通过设置HTTP X-Forwarded-For字段保存$remote_addr,可以达到在服务器端读取HTTP扩展字段X-Forwarded-For,获取客户端真是的IP.

配置Nginx+apache

环境介绍:

1.安装Nginx,我选用1.12.2版本,上传补丁包到192.168.44.18的/usr/local/nginx目录。执行如下步骤:

2.启动两台web服务器的apache进程:

3.配置Nginx,先不开启日志转发。只配置负载均衡。

4.启动nginx,测试看看。

5.我们检查apache日志发现,访问的源地址来自于Ngnix服务器192.168.44.18,看不到客户端的真实IP.

6.修改Nginx配置,设置x-forwarded-for的地址为源IP地址。

7.修改两台web服务器apache部分配置。

8.检查日志,已经可以看到Source IP地址了。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180715G0OTPC00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券