在网上看了很多资料,还是不理解反向代理与正向代理的区别,感觉就是客户端发请求给代理,代理将服务器相应转发回来。
网上用的很多的是这种类似的图:
但是仔细想想,这两幅图完全一样啊,并没有看出来是“反向”还是“正向”的区别。
那我反向代理也可以说成,客户端不知道服务器地址,发请求给代理,代理去访问服务器,这不就成正向了?
正向代理也可以说成,服务器无法收到客户端请求,于是使用一台代理服务器帮助接收客户端请求,再转发回来,那这不成反向了?
我理解的不同只有这一点:两者的区别在于代理的对象不一样:正向代理代理的对象是客户端,反向代理代理的对象是服务端。
求解惑…………
我看过的资料:
1
dandycheung 2017-05-15 10:27:51 +08:00 via Android 1
正向代理是以客户端的身份去申请远程服务,更像是用户,反向代理一般是居于服务器的前端,对用户来说看起来就是服务本身。
|
2
jasontse 2017-05-15 10:29:47 +08:00 via iPad 4
正向代理是客户端配置,反向代理是服务器端配置。
|
3
scriptB0y OP @dandycheung
听起来反向代理就是服务器的正向代理…… 因为把服务器的 response 发送给客户了…… |
7
chairuosen 2017-05-15 10:45:14 +08:00 2
正向代理,代理相当于一个透明的中间件 a,你访问任何网站 ABCDE 都走这个中间件 a,但在你看来,你访问的永远都是 ABCDE,而不是 a。
反向代理,固定 a 为 A 的反向代理,唯一,访问 a 相当于访问 A,访问不到 BCDE,同时在你看来,你访问的不是 A 而是 a,你甚至不知道 A 的存在。 |
8
maikcn 2017-05-15 10:46:16 +08:00 2
代理的概念是一样的,就是你不能直接访问为你提供服务的那台服务器,需要有个中间人(代理)来帮你转达你的请求,或者服务器返回的信息。
从使用者的角度来说, [正向代理] 就是你明知道你无法直接访问服务器 A,需要找个服务,来让你能迂回的访问到服务器 A。比如你明明知道 Google 打不开,然后想要打开的时候,你用的服务对你来说就是正向代理。 [反向代理] 就是你需要访问一个服务,比如百度,你知道访问 baidu.com,也知道对应的 ip 是 14.215.177.37,但百度可能是用到内部的一个服务器 ip 192.168.0.2 来接受搜索的请求并返回结果,只是通过 14.215.177.37 这个 ip 跟你进行交互,14.215.177.37 这个 ip 不提供搜索的服务,这个过程中的 14.215.177.37 就是反向代理了。而使用者在这个过程中是完全无感的。 |
9
Citrus 2017-05-15 10:52:59 +08:00
我滴妈,这两张图虽然不完全准确,但是区别如此明显,说出了精髓,你居然说 “这两幅图完全一样啊” ???黑人问号。。。
请注意,图里的背景蓝色的 LAN 是很重要的!如果你忽视了这个,说完全一样,那。。。 |
10
qianguozheng 2017-05-15 11:16:30 +08:00 4
再给你添一把火,透明代理。 哈哈
正向代理-- 我代理帮我干活。(你发出去的 http 请求是完整的 url,由代理生成 http 请求头) 反向代理-- 我不知道帮我干活的是代理。(服务器自己的负载均衡服务器调度,你不用管) 透明代理-- 我不知道他帮我干了活(著名的劫持, 重组 http 请求) |
11
bukip 2017-05-15 11:33:53 +08:00 1
正向代理:
你的机器 -> proxy -> 广阔天地 反向代理: 你的机器 <- proxy <- 某个网站 |
12
BlackCat02 2017-05-15 11:57:24 +08:00
@Citrus +1。。。这图简直不能再明确
|
13
BlackCat02 2017-05-15 11:58:22 +08:00
@scriptB0y 本质都是计算机软件
|
14
Clarencep 2017-05-15 12:03:05 +08:00 1
@Citrus +1
不过,正向代理也可以不部署在 LAN 内;反向代理也可以代理 LAN 外的服务器(比如代理 google 的各种网站)。 我觉得正向 /反向的主要区别在于代理服务器是专门为 Client/Server 服务的。 |
15
mooncakejs 2017-05-15 12:20:28 +08:00 via iPhone 1
正在代理需要知道服务器地址。 反向代理需要知道后端服务器真实的地址
|
16
libook 2017-05-15 12:39:38 +08:00 via Android 1
发起连接的方向有关;出去的是正向,进来的是反向。正反是人为定义的吧。
科学上网用的代理服务器,发起网络请求的连接是由内而外,正向。 服务器用的 nginx,发起网络请求的连接是由外而内的,反向。 |
18
MrFireAwayH 2017-05-15 12:53:47 +08:00 via Android 1
接地气点的来一个
正向代理 你的杯子装了水 你也可以装其他东西比如 Dr.Pepper 反向代理 你开了罐 Dr.Pepper 所以只能喝 Dr.Pepper 它们都是代理(容器) 不知道够不够准确😶 |
19
tony1016 2017-05-15 13:06:23 +08:00
直观一点:
正向代理,就是你要在浏览器设置代理服务器,然后就能上网了 反向代理,就是你访问不了谷歌,但是你可以访问我的网站,https://so.tonylee.name,我的服务器帮你把谷歌抓过来供你使用 |
21
D3EP 2017-05-15 13:40:04 +08:00 via Android
正向代理是为你服务的,反向代理是为服务器服务的。
|
24
Showfom 2017-05-15 15:01:47 +08:00 via iPhone
然而反向代理稍作修改也是可以访问任何网站的 嘿嘿
|
25
huangmingyou 2017-05-15 16:37:49 +08:00
比如访问 www.vphotos.cn/index.html
正向代理: http 请求头里面的 url 是 http://www.vphotos.cn/index.html 反向代理: http 请求头里面的 url 是 /index.html 没有任何代理: http 请求头 url 是 /index.html 正向代理的 url 加了 www.vphotos.cn 是需要告诉代理服务器,目标 web 服务器的主机名,如果不这么写,代理服务器不知道怎么取内容。 但是反向的代理服务器,对客户端来说是透明的。 反向代理服务器,只针对特定的域名提供服务。 而正向的代理,通常是能代理所有域名。 |
26
huangmingyou 2017-05-15 16:39:43 +08:00
补充一下,正向代理,浏览器知道代理服务器的存在,所以在 http 请求头里面的 url 会加上域名。 上面说的 http 请求头,是浏览器发出的。
|
27
imn1 2017-05-15 16:50:27 +08:00
这幅图两个互换比较容易理解,阴影部分也挪动
正向之外应该是多个 server,反向之外是一个 server |
28
crossoverJie 2017-05-15 17:26:57 +08:00
|