反向代理缓存

模板网 2021-04-14

一、传统代理

很久以前,我们通常需要通过代理服务器来访问互联网上的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,它更加专注与反向代理,而且对于后面要介绍的负载均衡也有很好的支持。

相关文章

  1. redis 主从复制

    一、集群的作用 1.主从备份 防止主机宕机 2.读写分离 分担master的任务 3.任务分离,如从服务器分别担任备份工作与计算工作 二、redis集群配置 Master配置 1、关闭rdb快照

  2. 常见排序列表

    常见排序列表 中文名称 英文名称 平均时间复杂度 最坏时间复杂度 最好时间复杂度 空间复杂度 稳定性 选择排序 Selection n^2 n^2 n^2 1 不稳 冒泡排序 Bub

  3. redis的安装配置

    先介绍mac的安装方法 一、安装(首先你要先安装brew工具) brew install redis 然后在终端的末尾你会发现如下: if you don't want/need a backgr

  4. 虚拟环境-virtualenv

    在开发Python应用程序的时候,系统安装的Python3只有一个版本:3.4。所有第三方的包都会被pip安装到Python3的site-packages目录下。 如果我们要同时开发多个应用程序,那

  5. php配置加载器

    配置加载器 当我们使用App::cfg系列方法获取配置时,wulaphp是通过配置加载器先加载配置然后再返回配置项对应值的(当然可以返回整个配置数组)。配置加载器ConfigurationLoade

随机推荐

  1. redis 主从复制

    一、集群的作用 1.主从备份 防止主机宕机 2.读写分离 分担master的任务 3.任务分离,如从服务器分别担任备份工作与计算工作 二、redis集群配置 Master配置 1、关闭rdb快照

  2. 常见排序列表

    常见排序列表 中文名称 英文名称 平均时间复杂度 最坏时间复杂度 最好时间复杂度 空间复杂度 稳定性 选择排序 Selection n^2 n^2 n^2 1 不稳 冒泡排序 Bub

  3. redis的安装配置

    先介绍mac的安装方法 一、安装(首先你要先安装brew工具) brew install redis 然后在终端的末尾你会发现如下: if you don't want/need a backgr

  4. 虚拟环境-virtualenv

    在开发Python应用程序的时候,系统安装的Python3只有一个版本:3.4。所有第三方的包都会被pip安装到Python3的site-packages目录下。 如果我们要同时开发多个应用程序,那

  5. php配置加载器

    配置加载器 当我们使用App::cfg系列方法获取配置时,wulaphp是通过配置加载器先加载配置然后再返回配置项对应值的(当然可以返回整个配置数组)。配置加载器ConfigurationLoade