反向代理及如何获得原始IP
在现代网站架构中,scalability 已经不再是可有可无的质量属性,而是决定着网站的生死攸关,所以稍微上规模的站点都不会只有一个web server,让internet clients 直接与其交互,出于安全性和scale out的考量,一般都会在web server 和用户之间设置Reverse Proxy server 或者 Load-Balancer, 又或者是RP 和 LB 的组合。其好处,网络上已经有较多的资料,此处不再赘述。
下面看一个RP和LB组合使用的例子:
Here is the flow of the requests and responses:
- The client gets connected through the
firewall to thereverse-proxy in the DMZ and send it its request. - The Reverse-Proxy validates the request, analyzes it to choose the right farm then forward it to theload-balancer in the LAN, through the
firewall. - The Load-balancer choose a
server in the farm and forward the request to it - The server processes the request then answers to the
load-balancer - The load-balancer forward the response to the
reverse-proxy - The reverse-proxy forward the response to the
client
Bascially, the source IP is modified twice on this kind of architecture: during the steps2 and
3.
And of course, the more you chain load-balancer and reverse proxies, the more the source IP will be changed.
那么怎样获取原始IP呢? 因为source IP 对后端应用非常有用,比如根据IP定位用户所在区域,以便提供localized的服务; 根据用户IP做风险评估 (是不是恶意攻击IP?)
一个比较简单的办法是增加一个自定义的HTTP Header -- X-Forwarded-For (XFF) for identifying originating IP address of a client connecting to a web
server through an HTTP Proxy.
当然你也可以根据你公司的naming convention, 定义自己的Header, 比如在eBay,It is X-eBay-Client-IP
eBay内部描述:
Operations
started introducing Layer 7 load balancers (NetScaler) on site. From application server point of view requests arrive with the source IP address of the load balancer. Many eBay applications need to know the source IP address of the client. To support this
requirement we introduce a standard for eBay HTTP header X-eBay-Client-IP.
Netscaler and other similar devices will set this header and applications will know to use it.
参考:
http://blog.exceliance.fr/2012/06/05/preserve-source-ip-address-despite-reverse-proxies/
http://kb.radware.com/questions/2559/How+to+allow+an+application+to+see+the+client+real+source+IP%3F
版权声明:本文为博主原创文章,未经博主允许不得转载。
反向代理及如何获得原始IP的更多相关文章
- 查找“CDN、负载均衡、反向代理”等大型网络真实IP地址的方法
首先,CDN.负载均衡.反向代理还分为很多层,有时查出来的是最外层的 CDN 服务器群,真实的机器是不对外开放的,类似这样的: 用户 → CDN 网络 → 一台或多台真实机器 ↗ CDN Server ...
- Apache 2.4.7在CentOS6.4中安装配置反向代理解决单外网IP对应多个内网主机的方法实践
欢迎转载,转载时请保留全文及出处. Apache 2.4.7在CentOS6.4中安装配置反向代理解决单外网IP对应多个内网主机的方法实践 Apache安装 下载源程序(http://httpd.ap ...
- [转]用apache反向代理解决单外网ip对应内网多个web主机的问题
用apache反向代理解决单外网ip对应内网多个web主机的问题 转载一个有独立外网IP,需内网服务器对外发布的例子,是应用apache虚拟主机的. 来源地址:http://www.itshantou ...
- 让pomelo可以获取到反向代理websockets的真实用户IP
/node_modules/pomelo/lib/connectors/hybridsocket.js 找到 var Socket = function(id, socket) { 给remoteAd ...
- nginx反向代理node.js获取客户端IP
使用Nginx做node.js程序的反向代理,会有这么一个问题:在程序中获取的客户端IP永远是127.0.0.1 如果想要拿到真实的客户端IP改怎么办呢? 一.首先配置Nginx的反向代理 proxy ...
- Nginx 反向代理获取设备真实的IP地址
package com.das.common.util; import org.apache.commons.lang3.StringUtils; import org.springframework ...
- Nginx反向代理下IIS获取真实IP
1. iis 如果放在反向代理后面,日志里的c-ip是反向代理服务器的ip,不是真正用户的ip,想要记录用户的ip要做两件事. 一.在反向代理设置X-Forwarded-For段,以下为nginx下的 ...
- nginx反向代理Tomcat/Jetty获取客户端IP地址
使用nginx做反向代理,Tomcat服务器和Jetty服务器如何获取客户端真实IP地址呢?首先nginx需要配置proxy_set_header,这样JSP使用request.getHeader(& ...
- Nginx 反向代理Tomcat服务器获取真实IP问题
1.nginx.conf 配置 修改 Server location配置 增加 proxy_set_header X-Real-IP $remote_addr; #保留代理之前的真实客户端ip pro ...
随机推荐
- Oracle创建、删除表空间、用户
1.创建临时表空间 create temporary tablespace linshi tempfile 'e:\linshi.dbf' size 50m autoextend on next 50 ...
- LVS的调度算法
LVS的调度算法(Scheduling Method)一共有10种 一.静态方法:仅根据算法本身进行调度 1.rr(Round Robin):轮询 2.wrr(Werghted Round Robin ...
- wireshark如何抓取别人电脑的数据包
抓取别人的数据包有几种办法,第一种是你和别人共同使用的那个交换机有镜像端口的功能,这样你就可以把交换机上任意一个人的数据端口做镜像,然后你在镜像端口上插根网线连到你的网卡上,你就可以抓取别人的数据了: ...
- 几个排序算法的python实现
几个排序算法 几个排序算法 几个排序算法 冒泡排序 选择排序 插入排序 快速排序 quick sort 冒泡排序 冒泡排序是比较简单的排序方法,它的思路是重复的走过要排序的序列,一次比较两个元 ...
- javac
http://openjdk.java.net/groups/compiler/ http://crazyjavahacking.org/tag/javac/ http://openjdk.java. ...
- mesos INSTALL
$ git clone https://github.com/mesosphere/playa-mesos $ cd playa-mesos $ vagrant up --provision
- Oracle常见的几种等待事件
1. CPU time CPU time其实不是真正的等待事件.是衡量CPU是否瓶颈的一个重要指标.一般来讲,一个良好的系统,CPU TIME 应该排在TOP 5 TIME Event的最前面. 当然 ...
- JS获取当前日期时间及JS日期格式化
Js获取当前日期时间: var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份( ...
- apache配置域名指向
<VirtualHost *:80>ServerAdmin webmaster@example.com ——管理员邮箱(可以随便写一个)DocumentRoot "/home/p ...
- 51nod 1290 Counting Diff Pairs 莫队 + bit
一个长度为N的正整数数组A,给出一个数K以及Q个查询,每个查询包含2个数l和r,对于每个查询输出从A[i]到A[j]中,有多少对数,abs(A[i] - A[j]) <= K(abs表示绝对值) ...