HAProxy代理后端服务取真实IP

两台局域网内的webpy服务A、B,一台HAProxy用来做代理P,配有域名p.com

前期的请求从p.com访问没有问题,但有一个请求是需要记录客户端的IP,并针对客户端IP返回不同信息的。

这种情况下出问题了,A、B取到的都是P的内网IP:10.2.2.250

系统配置人员调整了P的策略,加上透传机制,但不知道哪里有问题配置上后就无法正常访问后台服务A、B。

此问题没有解决的情况下,海外运营需要将域名p.com放到Akamai加速中,突然发现A、B能取到客户端IP了,原因未明。。。

直接访问B和通过p.com访问,打出HTTP相关头参数,发现通过p.com访问HTTP头多了以下信息:
HTTP_VIA:1.1 v1-akamaitech.net(ghost) (AkamaiGHost), 1.1 v1-akamaitech.net(ghost) (AkamaiGHost), 1.1 akamai.net(ghost) (AkamaiGHost)
HTTP_X_FORWARDED_FOR:202.108.36.107, 184.50.87.135, 10.123.65.61
HTTP_AKAMAI_ORIGIN_HOP:3
HTTP_X_AKAMAI_CONFIG_LOG_DETAIL:true

直接访问B或者通过P的IP访问:
REMOTE_ADDR:10.2.2.250
通过p.com访问:
REMOTE_ADDR:202.108.36.107

基本判断是通过HTTP_X_FORWARDED_FOR传入真实IP了,用python写个脚本伪造此信息:
def GET2(strUrl):
    r = urllib2.Request(strUrl)
    r.add_header('X-Forwarded-For', '12.34.56.78')
    doc = urllib2.urlopen(r)
    return doc.read()

访问后看到以下值:
HTTP_X_FORWARDED_FOR:12.34.56.78
REMOTE_ADDR:12.34.56.78

无论是访问P的IP还是访问B,结果都一样,而webpy是通过web.ctx.ip取的就是REMOTE_ADDR,通过Akamai加速后,也就能取到真实IP了。
当然这种情况下如果有需要的话也可以伪造,这也可以给测试提供条件,直接可以用海外IP来测试相关处理逻辑了。

参见:
http://rdc.gleasy.com/使用haproxy和tproxy实现全透明代理.html
http://www.cnblogs.com/txw1958/archive/2012/03/12/2392067.html
http://blog.csdn.net/intel80586/article/details/8906779

HAProxy代理后端服务取真实IP相关推荐

  1. Haproxy 让后端RS记录真实IP

    #让RS记录客户端的真实IP #1.先在haproxy.cfg中加入下面参数. listen www ... option forwardfor #如果后端服务器需要获得客户端真实ip需要配置的参数, ...

  2. Haproxy 代理后端服务

    参考 http://www.haproxy.org HAProxy · GitHub 目录 一.Haproxy环境准备 1.Haproxy简介 1.1.haproxy原理 1.2.Haproxy优点 ...

  3. Linux学习-HaProxy代理后端Nginx

    代理作用:web缓存(加速),反向代理.内容路由(根据流量及内容类型将请求转发至特定服务器),转码器 缓存作用:减少冗余内容传输,节省带宽.缓解网络瓶颈,降低对原始服务器压力,降低传输延迟 Hapro ...

  4. 真正的取真实IP地址及利弊Asp.net

    真正的取真实IP地址及利弊Asp.net 真正的取真实IP地址及利弊Asp.net http://tech.aspxsoft.com/aspnet/2006-3-16/425.aspx 真正的取真实I ...

  5. 真正的取真实IP地址及利弊

    目前网上流行的所谓"取真实IP地址"的方法,都有bug,没有考虑到多层透明代理的情况. 多数代码类似: string IpAddress = (HttpContext.Curren ...

  6. C#取真实IP地址及分析

    说一哈,我也是转来的,不是想骗PV,方便自己查而已! 目前网上流行的所谓"取真实IP地址"的方法,都有bug,没有考虑到多层透明代理的情况. 多数代码类似: string IpAd ...

  7. 查找“CDN、负载均衡、反向代理”等大型网络真实IP地址的方法

    查找"CDN.负载均衡.反向代理"等大型网络真实IP地址的方法     首先,CDN.负载均衡.反向代理还分为很多层,有时查出来的是最外层的 CDN 服务器群,真实的机器是不对外开 ...

  8. PHP、Tomcat获取Nginx代理后的客户端真实IP

    PHP.Tomcat获取Nginx代理后的客户端真实IP 文章目录 PHP.Tomcat获取Nginx代理后的客户端真实IP 一.PHP获取Nginx代理后客户端真实IP Nginx配置 PHP配置 ...

  9. C#取真实IP地址--多个代理背后的ip地址

    //多个代理背后的ip地址文件名:IPAddress.csusing System; using System.Data; using System.Configuration; using Syst ...

最新文章

  1. python编的俄罗斯方块游戏下载_python写的俄罗斯方块游戏
  2. 4.12 《硬啃设计模式》 第29章 行为型设计模式小结
  3. 《按键消抖与LED控制》实验的个人思考与总结
  4. php5.3中ZendGuardLoader与wincache冲突问题的解决方法
  5. 挺水的一门课,发现全系都过了,就自己挂了,这是一种什么样的感觉呢?
  6. 网页信息抓取进阶 支持Js生成数据 Jsoup的不足之处
  7. 负载均衡轮询算法和服务器性能,SpringCloud-Ribbon负载均衡机制、手写轮询算法
  8. Linux/deppin 中安装、卸载软件的几种命令
  9. 佳能Canon PIXMA TS208 打印机驱动
  10. 青鸟云课堂_青鸟云课堂
  11. 我用计算机的故事,计算机老师的我的教育故事随笔
  12. 带宽单位和下载速度的换算
  13. 苹果键盘怎么手写_今天才发现,苹果手机自带录音转文字功能,堪称会议神器...
  14. 美国基础设施法案对该国加密矿业会产生什么影响?
  15. AUTOCAD2012安装失败解决方法
  16. 解决Worker 1 failed executing transaction ‘ANONYMOUS‘ at master log mall-mysql-bin.000001, end_log_pos
  17. 【黄啊码】MySQL入门—3、我用select *,老板直接赶我坐火车回家去,买的还是站票
  18. 大数据技术特点及优势有哪些
  19. docker容器日常管理(四)
  20. 【HDU 2619】Love you Ten thousand years

热门文章

  1. Snails 1.0正式发布
  2. 在CentOS7上源码安装MongoDB 3.2.7
  3. SAP FICO 会计凭证打印开发说明书(包括开发源代码、测试样例及FS)
  4. 2021年软件开发趋势大预测
  5. 云层高度方法总结:激光雷达信号反演/遥感数据估计
  6. Redis(八) - Redis企业实战之优惠券秒杀
  7. Python(x,y)下载安装及基本操作
  8. 推荐几个9月爆火的 GitHub 电商项目
  9. Comet OJ-2019国庆欢乐赛
  10. 第一单元----(4)认识编译器 源代码和可执行程序的关系