娱乐

反向代理

时间:2010-12-5 17:23:32  作者:百科   来源:探索  查看:  评论:0
内容摘要:你正在看这篇文章,这本身就是一次反向代理。浏览器向服务器请求内容,但真正应答的,往往不是那台存着文章的原始服务器,而是一层看不见的中间人。 我最早被反向代理这个概念绕晕,是在一次排查线上故障的时候。网

你正在看这篇文章,反向代理这本身就是反向代理一次反向代理。浏览器向服务器请求内容,反向代理但真正应答的反向代理,往往不是反向代理那台存着文章的原始服务器,而是反向代理一层看不见的中间人。

我最早被反向代理这个概念绕晕,反向代理是反向代理在一次排查线上故障的时候。网站突然打不开,反向代理运维同事说“回源失败了”。反向代理我一脸茫然——回源?反向代理源在哪?后来才明白,用户请求先打到一台Nginx上,反向代理Nginx再把请求转给后端的反向代理应用服务器。用户根本不知道后端服务器的反向代理IP地址,就像你去餐厅吃饭,反向代理只跟服务员点菜,不会直接冲进后厨找厨师。服务员就是反向代理,后厨才是真正的源站。

那“反向”二字从哪来?因为传统的正向代理是替用户干活——你访问不了谷歌,找个海外代理服务器帮你转发请求,目标服务器知道最终用户是谁,但用户不知道目标服务器长什么样。反向代理正好反过来:用户知道域名,但不知道背后具体是哪台机器在响应。代理服务器站在源站前面,替源站挡住所有流量。一个替用户藏身份,一个替服务器藏身份,方向截然相反。

这么一层薄薄的转发,能玩的花样可太多了。最常见的用途是负载均衡。我见过一台单机应用,高峰期CPU飙到90%,用户卡得骂娘。后来在前面架了三台反向代理,轮询转发到三台后端服务器,每台负载降到30%,页面秒开。反向代理像个调度员,把汹涌的请求分流到各个工位上,谁闲着就派给谁。

缓存是另一个杀手锏。静态资源——图片、CSS、JS文件——根本不需要每次都去后端读取。反向代理可以把这些内容存在自己的内存里,用户再来要,直接甩给他,后端服务器连眼皮都不用抬。我调过的一个项目,加了缓存之后,后端接口的日请求量从百万级降到十万级,服务器负载直接砍半。那感觉就像给快递员配了个仓库,不用每次都跑工厂取货。

还有安全隔离。后端服务器可以只允许内网IP访问,对外完全隐身。所有外部请求必须经过反向代理这一道关卡,代理层可以做WAF防护、IP黑名单、限流。就算黑客把代理服务器打穿了,也摸不到真正的数据服务器。这层屏障值多少钱?我见过一家小公司,把数据库直接暴露在公网,结果被人拖库,数据全没了。如果前面加一层反向代理,至少攻击面会小很多。

再说一个反直觉的点:反向代理其实经常扮演“加速器”的角色,而不是减速。很多人觉得多一层转发肯定慢,但实际恰恰相反。因为代理服务器可以提前建立到后端的keep-alive连接,省去频繁握手的时间;还能压缩响应体、合并请求。用户感知到的延迟,往往比直连后端还低。当然,前提是代理层配置得当——如果后端响应本来就慢,代理层只是把慢传递过来,那就没啥意义了。

我见过最离谱的一个案例,是有人把反向代理用在了数据库前面。听着很蠢对吧?但人家是为了做读写分离和SQL审计。所有SQL语句经过代理层,根据类型自动路由到主库或从库,同时记录日志。虽然性能损耗不小,但架构上确实简洁。这算是把反向代理玩出花来了。

回到开头那句话——你读这篇文章的请求,大概率也经过了某个反向代理。CDN节点就是一层特殊的反向代理,它把内容缓存到离你最近的机房。你以为你在访问原始网站,其实你连的是隔壁城市的缓存服务器。互联网的底层逻辑,就是一层套一层的代理关系。

反向代理不神秘,就是一个站在服务器前面的看门人。它转发请求、缓存内容、挡攻击、做分流。真正理解它,不是背概念,而是知道在什么场景下,这个看门人能帮你解决什么问题。下次网站卡了,别急着骂后端程序员——先看看代理层是不是堵了。

最近更新
热门排行
copyright © 2026 powered by 力不从心网   sitemap