反向代理和正向代理的区别到底是什么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
scriptB0y
V2EX    问与答

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

  •  3
    &bsp;
  •   scriptB0y 2017-05-15 10:21:34 +08:00 8560 次点击
    这是一个创建于 3072 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    求解惑…………

    我看过的资料:

    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
    28 条回复    2017-05-15 17:26:57 +08:00
    dandycheung
        1
    dandycheung  
       2017-05-15 10:27:51 +08:00 via Android   1
    正向代理是以客户端的身份去申请远程服务,更像是用户,反向代理一般是居于服务器的前端,对用户来说看起来就是服务本身。
    jasontse
        2
    jasontse  
       2017-05-15 10:29:47 +08:00 via iPad   4
    正向代理是客户端配置,反向代理是服务器端配置。
    scriptB0y
        3
    scriptB0y  
    OP
       2017-05-15 10:31:16 +08:00
    @dandycheung
    听起来反向代理就是服务器的正向代理…… 因为把服务器的 response 发送给客户了……
    scriptB0y
        4
    scriptB0y  
    OP
       2017-05-15 10:31:53 +08:00
    @jasontse 所以只是概念的区别,本质上并没有区别? 都是代理
    jasontse
        5
    jasontse  
       2017-05-15 10:36:17 +08:00 via iPad   1
    @scriptB0y 正向代理可以访问 Google,反向代理只能访问特定网址。
    scriptB0y
        6
    scriptB0y  
    OP
       2017-05-15 10:40:36 +08:00
    @jasontse 理解了。
    chairuosen
        7
    chairuosen  
       2017-05-15 10:45:14 +08:00   2
    正向代理,代理相当于一个透明的中间件 a,你访问任何网站 ABCDE 都走这个中间件 a,但在你看来,你访问的永远都是 ABCDE,而不是 a。
    反向代理,固定 a 为 A 的反向代理,唯一,访问 a 相当于访问 A,访问不到 BCDE,同时在你看来,你访问的不是 A 而是 a,你甚至不知道 A 的存在。
    maikcn
        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 就是反向代理了。而使用者在这个过程中是完全无感的。
    Citrus
        9
    Citrus  
       2017-05-15 10:52:59 +08:00
    我滴妈,这两张图虽然不完全准确,但是区别如此明显,说出了精髓,你居然说 “这两幅图完全一样啊” ???黑人问号。。。
    请注意,图里的背景蓝色的 LAN 是很重要的!如果你忽视了这个,说完全一样,那。。。
    qianguozheng
        10
    qianguozheng  
       2017-05-15 11:16:30 +08:00   4
    再给你添一把火,透明代理。 哈哈

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

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

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

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

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

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

    它们都是代理(容器)

    不知道够不够准确
    tony1016
        19
    tony1016  
       2017-05-15 13:06:23 +08:00
    直观一点:
    正向代理,就是你要在浏览器设置代理服务器,然后就能上网了
    反向代理,就是你访问不了谷歌,但是你可以访问我的网站,https://so.tonylee.name,我的服务器帮你把谷歌抓过来供你使用
    scriptB0y
        20
    scriptB0y  
    OP
       2017-05-15 13:30:44 +08:00
    @tony1016 你的站好快……
    D3EP
        21
    D3EP  
       2017-05-15 13:40:04 +08:00 via Android
    正向代理是为你服务的,反向代理是为服务器服务的。
    tony1016
        22
    tony1016  
       2017-05-15 13:42:33 +08:00
    @scriptB0y 大家应该都转向 GCE 平台了吧,反正免费,不用白不用
    tony1016
        23
    tony1016  
       2017-05-15 13:53:09 +08:00
    @scriptB0y 呀,你一说,我一看,原来是被 GFW 认证了
    Showfom
        24
    Showfom  
    PRO
       2017-05-15 15:01:47 +08:00 via iPhone
    然而反向代理稍作修改也是可以访问任何网站的 嘿嘿
    huangmingyou
        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 服务器的主机名,如果不这么写,代理服务器不知道怎么取内容。

    但是反向的代理服务器,对客户端来说是透明的。 反向代理服务器,只针对特定的域名提供服务。 而正向的代理,通常是能代理所有域名。
    huangmingyou
        26
    huangmingyou  
       2017-05-15 16:39:43 +08:00
    补充一下,正向代理,浏览器知道代理服务器的存在,所以在 http 请求头里面的 url 会加上域名。 上面说的 http 请求头,是浏览器发出的。
    imn1
        27
    imn1  
       2017-05-15 16:50:27 +08:00
    这幅图两个互换比较容易理解,阴影部分也挪动

    正向之外应该是多个 server,反向之外是一个 server
    crossoverJie
        28
    crossoverJie  
       2017-05-15 17:26:57 +08:00
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2864 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 13:39 PVG 21:39 LAX 06:39 JFK 09:39
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86