反向代理和正向代理的区别到底是什么?

2017-05-15 10:21:34 +08:00
 scriptB0y

在网上看了很多资料,还是不理解反向代理与正向代理的区别,感觉就是客户端发请求给代理,代理将服务器相应转发回来。

网上用的很多的是这种类似的图:

但是仔细想想,这两幅图完全一样啊,并没有看出来是“反向”还是“正向”的区别。

那我反向代理也可以说成,客户端不知道服务器地址,发请求给代理,代理去访问服务器,这不就成正向了?

正向代理也可以说成,服务器无法收到客户端请求,于是使用一台代理服务器帮助接收客户端请求,再转发回来,那这不成反向了?

我理解的不同只有这一点:两者的区别在于代理的对象不一样:正向代理代理的对象是客户端,反向代理代理的对象是服务端。

求解惑…………

我看过的资料:

  1. http://www.jianshu.com/p/208c02c9dd1d
  2. https://www.zhihu.com/question/24723688
  3. http://z00w00.blog.51cto.com/515114/1031287
  4. https://github.com/moonbingbing/openresty-best-practices/blob/master/ngx/reverse_proxy.md
8196 次点击
所在节点    问与答
28 条回复
dandycheung
2017-05-15 10:27:51 +08:00
正向代理是以客户端的身份去申请远程服务,更像是用户,反向代理一般是居于服务器的前端,对用户来说看起来就是服务本身。
jasontse
2017-05-15 10:29:47 +08:00
正向代理是客户端配置,反向代理是服务器端配置。
scriptB0y
2017-05-15 10:31:16 +08:00
@dandycheung
听起来反向代理就是服务器的正向代理…… 因为把服务器的 response 发送给客户了……
scriptB0y
2017-05-15 10:31:53 +08:00
@jasontse 所以只是概念的区别,本质上并没有区别? 都是代理
jasontse
2017-05-15 10:36:17 +08:00
@scriptB0y 正向代理可以访问 Google,反向代理只能访问特定网址。
scriptB0y
2017-05-15 10:40:36 +08:00
@jasontse 理解了。
chairuosen
2017-05-15 10:45:14 +08:00
正向代理,代理相当于一个透明的中间件 a,你访问任何网站 ABCDE 都走这个中间件 a,但在你看来,你访问的永远都是 ABCDE,而不是 a。
反向代理,固定 a 为 A 的反向代理,唯一,访问 a 相当于访问 A,访问不到 BCDE,同时在你看来,你访问的不是 A 而是 a,你甚至不知道 A 的存在。
maikcn
2017-05-15 10:46:16 +08:00
代理的概念是一样的,就是你不能直接访问为你提供服务的那台服务器,需要有个中间人(代理)来帮你转达你的请求,或者服务器返回的信息。

从使用者的角度来说,

[正向代理] 就是你明知道你无法直接访问服务器 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 就是反向代理了。而使用者在这个过程中是完全无感的。
Citrus
2017-05-15 10:52:59 +08:00
我滴妈,这两张图虽然不完全准确,但是区别如此明显,说出了精髓,你居然说 “这两幅图完全一样啊” ???黑人问号。。。
请注意,图里的背景蓝色的 LAN 是很重要的!如果你忽视了这个,说完全一样,那。。。
qianguozheng
2017-05-15 11:16:30 +08:00
再给你添一把火,透明代理。 哈哈

正向代理-- 我代理帮我干活。(你发出去的 http 请求是完整的 url,由代理生成 http 请求头)
反向代理-- 我不知道帮我干活的是代理。(服务器自己的负载均衡服务器调度,你不用管)
透明代理-- 我不知道他帮我干了活(著名的劫持, 重组 http 请求)
bukip
2017-05-15 11:33:53 +08:00
正向代理:
你的机器 -> proxy -> 广阔天地

反向代理:
你的机器 <- proxy <- 某个网站
BlackCat02
2017-05-15 11:57:24 +08:00
@Citrus +1。。。这图简直不能再明确
BlackCat02
2017-05-15 11:58:22 +08:00
@scriptB0y 本质都是计算机软件
Clarencep
2017-05-15 12:03:05 +08:00
@Citrus +1

不过,正向代理也可以不部署在 LAN 内;反向代理也可以代理 LAN 外的服务器(比如代理 google 的各种网站)。

我觉得正向 /反向的主要区别在于代理服务器是专门为 Client/Server 服务的。
mooncakejs
2017-05-15 12:20:28 +08:00
正在代理需要知道服务器地址。 反向代理需要知道后端服务器真实的地址
libook
2017-05-15 12:39:38 +08:00
发起连接的方向有关;出去的是正向,进来的是反向。正反是人为定义的吧。
科学上网用的代理服务器,发起网络请求的连接是由内而外,正向。
服务器用的 nginx,发起网络请求的连接是由外而内的,反向。
Citrus
2017-05-15 12:47:33 +08:00
@Clarencep 对,所以我说这图有些小问题。但是这些问题不大,只是不常用的用法。最常见的场景这张图已经画的非常好了。
MrFireAwayH
2017-05-15 12:53:47 +08:00
接地气点的来一个

正向代理 你的杯子装了水 你也可以装其他东西比如 Dr.Pepper

反向代理 你开了罐 Dr.Pepper 所以只能喝 Dr.Pepper

它们都是代理(容器)

不知道够不够准确😶
tony1016
2017-05-15 13:06:23 +08:00
直观一点:
正向代理,就是你要在浏览器设置代理服务器,然后就能上网了
反向代理,就是你访问不了谷歌,但是你可以访问我的网站,https://so.tonylee.name,我的服务器帮你把谷歌抓过来供你使用
scriptB0y
2017-05-15 13:30:44 +08:00
@tony1016 你的站好快……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/361342

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX