反向代理缓存
一、传统代理
很久以前,我们通常需要通过代理服务器来访问互联网上的 Web 站点,代理服务器本身接入了互联网,而我们通过内部网络与代理服务器相连。即便是现在,有些时候为了访问一些由于某种原因无法直接访问的站点,我们也会通过特定的代理服务器,绕过某些限制来访问目标站点。
现在,我们普遍已经不使用代理服务器了,当我们的 PC 处于内部网络时,网关会使用NAT(网络地址转换)技术,将PC的内部IP地址和网关的外网IP地址进行相互转换,使得PC发出的请求可以顺利到达外部网络的Web服务器,同时将返回的数据正确的传送给内部网络的PC。
在某种意义上,NAT在这里起到的作用等同于代理服务器,但是他们的不同在于,代理服务器工作在应用层,所以只有当它支持某个协议的时候才可以转发该协议的数据,而NAT的工作在应用层以下,它可以透明地转发应用层协议的数据,比如 HTTP、FTP、SMTP 等。不过,他们都用共同的一点,也是代理的特点,那就是用户的PC隐藏在了代理服务器或者NAT网关之后,换句话说,Web服务器只知道是代理服务器或者网关发来的请求,而并不知道还存在幕后操作者。
这样以来,我们的PC便不用直接暴露在互联网中,有效提高了安全性能,因为攻击者是无法主动找到我们的,代理服务器或者网关就像一道防火墙保护者我们,但在实际情况中,我们的一些主动行为往往带来了更大的安全问题,遗憾的是,安全性不是我们讨论的主题,你可以阅读其他的相关资料。
另外,正式因为代理服务器工作在应用层,所以它可以很容易地提供基于缓存的加速功能,比如一个机构的内部网络通过代理服务器上网,一旦某个用户访问过的网页被缓存在代理服务器上,那么随后一段时间内,内部网络的其他用户便可以快速获得这个网页,而不需要再次经过外部网络请求Web服务器,随之还带来的另一个好处就是节省了带宽。
二、何为反向
回想刚才提到的传统代理服务器的特点,即用户隐藏在代理服务器之后,那么,反向代理服务器的特点便与此刚好相反,那就是Web服务器隐藏在代理服务器之后。我们将这种代理机制称为反向代理(Reverse Proxy),同时,实现这种机制的服务器,便称为反向代理服务器(Reverse Proxy Server)。
隐藏在反向代理服务器之后的Web服务器,我们习惯称它为后端服务器(Back-end Server),相对的,反向代理服务器在这里便成了前端服务器(Front-end Server)。通常,反向代理服务器暴露在互联网中,而后端Web服务器通过内部网络与他相连,当然,你也可以将反向代理服务器和Web服务器运行在同一台物理服务器上。
引入反向代理后,用户将通过反向代理服务器来间接访问Web服务器,不过用户并不关心这些,因为反向代理服务器可以完美的充当用户心中的Web服务器,至于反向代理服务器和后端Web服务器的沟通,则仍然是基于 HTTP,这一点和传统代理的本质是一样的。
将Web服务器隐藏在后端,这样也带来了一定的安全性,但这不是反向代理的主要目的,因为完全可以使用iptables来作为防火墙以达到相同的安全性目的。
三、在反向代理上创建缓存
的确,就像Web服务器缓存和浏览器缓存一样,我们同样可以将内容缓存在反向代理服务器上,所有缓存机制的实现仍然采用HTTP/1.1协议(缓存协商/过期时间)。
1.Nginx 作为反向代理服务器
我们知道反向代理只是 Nginx 上网一个扩展模块,并且它的缓存机制到目前为止还在不断完善,所以我们暂且放弃它。
2.Squid 作为反向代理服务器
Squid在这方面家喻户晓,不过,除了作为反向代理,他还热衷于其他很多的工作,比如传统代理、访问控制、身份验证、流量管理等,正式因为这样,它呈现出过于重量级的身躯,而且它的配置也过于复杂。
3.Varnish 作为反向代理服务器
但是在这里我们我们需要的很简单,仅仅是基于反向代理缓存的加速功能,所以我们选择了Varnish,它更加专注与反向代理,而且对于后面要介绍的负载均衡也有很好的支持。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: 前端如何高质量完成产品需求开发
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论