反向代理缓存

模板网 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. Python之系统交互

    我们几乎可以在任何操作系统上通过命令行指令与操作系统进行交互,比如Linux平台下的shell。那么我们如何通过Python来完成这些命令行指令的执行呢?另外,我们应该知道的是命令行指令的执行通常有

  2. redis aof日志持久化

    一、aof的原理 问题: 1、每个命令重写一次aof? 2、某个key修改100次,产生100行记录,aof文件会很大,怎么解决? aof重写(简化) 二、aof的配置 appendfsync

  3. CentOS编译安装PHP7.1.21环境

    0.安装一大堆必备的东西 先执行 yum install -y epel-release yum install -y libmcrypt-devel 再执行 yum -y install gcc

  4. 如何应对缓存穿透和缓存雪崩问题

    分析:这两个问题,说句实在话,一般中小型传统软件企业,很难碰到这个问题。如果有大并发的项目,流量有几百万左右。这两个问题一定要深刻考虑。 缓存穿透,即黑客故意去请求缓存中不存在的数据,导致所有的请

  5. redis 运维常用命令

    time #查看时间戳与微妙数 dbsize #查看当前数据库中key数量 bgrewriteaof #后台进程重写aof bgsave #后台保存rdb快照 save #保存rd

随机推荐

  1. Python之系统交互

    我们几乎可以在任何操作系统上通过命令行指令与操作系统进行交互,比如Linux平台下的shell。那么我们如何通过Python来完成这些命令行指令的执行呢?另外,我们应该知道的是命令行指令的执行通常有

  2. redis aof日志持久化

    一、aof的原理 问题: 1、每个命令重写一次aof? 2、某个key修改100次,产生100行记录,aof文件会很大,怎么解决? aof重写(简化) 二、aof的配置 appendfsync

  3. CentOS编译安装PHP7.1.21环境

    0.安装一大堆必备的东西 先执行 yum install -y epel-release yum install -y libmcrypt-devel 再执行 yum -y install gcc

  4. 如何应对缓存穿透和缓存雪崩问题

    分析:这两个问题,说句实在话,一般中小型传统软件企业,很难碰到这个问题。如果有大并发的项目,流量有几百万左右。这两个问题一定要深刻考虑。 缓存穿透,即黑客故意去请求缓存中不存在的数据,导致所有的请

  5. redis 运维常用命令

    time #查看时间戳与微妙数 dbsize #查看当前数据库中key数量 bgrewriteaof #后台进程重写aof bgsave #后台保存rdb快照 save #保存rd