Nginx之正反代理详解

背景在日常运维工作中 , 常常会用到反向代理 , 为了更安全同时为了负载均衡 , 分担压力 。
那么 , 有小伙伴就会有疑问:

  • 什么是反向代理?
  • 负载均衡又是怎么实现的?
  • 有反向代理那有正向代理吗?
  • 正向代理的应用场景是怎样的?
  • 反向代理和正向代理怎么配置实现呢?
带着这些疑问 , 就给大家详细解释下Nginx的正反向代理 。
环境Nginx(Nginx是一款自由的、开源的、高性能的HTTP服务器 。功能优势等等这里就不再赘述了 。度娘那里有很多信息 。)
代理说到代理 , 首先我们要明确一个概念 , 所谓代理就是一个代表、一个渠道;
此时就设计到两个角色 , 一个是被代理角色 , 一个是目标角色 , 被代理角色通过这个代理访问目标角色完成一些任务的过程称为代理操作过程;如同生活中的专卖店~客人到adidas专卖店买了一双鞋 , 这个专卖店就是代理 , 被代理角色就是adidas厂家 , 目标角色就是用户 。
反向代理我们在运维的日常工作中经常用到负载均衡 , 所以接触反向代理比较多 , 那么反向代理是怎样的呢? 。例如人气比较高的网站 , 如淘宝 , 京东等等 。每天访问人数的人很多 , 数以万计 , 此时单台服务器远远不能承载所有人的访问请求 , 这时作为资深运维人员就需要对web服务进行分布式部署;何为分布式部署呢?就是通过部署多台服务器组成web集群共同来处理访问请求 , 解决单台服务器不能承载的问题;分布式部署的web服务可以横行扩展 。而实现web分布式部署通常要用到反向代理 。Apache或nginx都可以 。本文以nginx为例 , 用nginx的反向代理实现的 。国内公司通过把nginx和其他的组件进行封装 , 根据场景或侧重点不同 , 便于构建安装 , 就有了:Tengine或OpenResty等 。有兴趣的朋友可以度娘搜索学习 。那么反向代理具体是通过什么样的方式实现的分布式的集群操作呢 , 我们先看一个示意图:
Nginx之正反代理详解

文章插图
 
通过上述的图解大家就可以看清楚了 , 多个客户端给服务器发送的请求 , nginx服务器接收到之后 , 按照一定的规则分发给了后端的web服务器进行处理了 。此时请求的来源也就是客户端是明确的 , 但是请求后具体由哪台服务器进行处理响应并不明确了 , web服务(nginx)扮演的就是一个反向代理角色 。
反向代理 , 主要用于服务器集群分布式部署负载均衡共同承载请求压力或安全需求等的情况下使用 , 反向代理可以隐藏了响应服务器的信息 , 能够过滤网络攻击 , 保证安全 。
 
正向代理阴阳两仪生万物 , 有阴就有阳 , 有反就有正 。说完反向代理了 , 我们再来看看正向代理 。正向代理可能在日常工作中用的不是很多 , 但是 , 相信大家经常听到:翻墙这个词 , 何为翻墙呢?翻墙是因为大陆对网络中攻击等等进行了屏蔽和过滤 , 相当于防火墙的墙一样 , 允许的我们才可以访问 , 屏蔽的我们就不能访问 。这是我们做技术的如果需要在国外查询技术文档等就需要翻墙 , 通常我们需要购买vpn来实现 , vpn的功能就是用的正向代理 。那么vpn是怎么实现的呢?我们如果需要访问国外的某些网站 , 此时你会发现位于国外的某网站我们通过浏览器是没有办法访问的 , 被屏蔽过滤掉了 。vpn的方式就是找一个可以正常访问国外网站的代理服务器 , 我们将请求发送给代理服务器 , 然后代理服务器去访问国外的网站 , 然后将访问到的数据传递给我们!
上述描述的代理模式称为正向代理 , 正向代理的特点是:客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器 , 但是不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息 。如下图
Nginx之正反代理详解

文章插图
 
正反向代理共同使用日常在实际项目操作中 , 正向代理和反向代理会搭配使用 。正向代理代理客户端的请求去访问目标服务器 , 而目标服务器是又使用反向代理服务器 , 反向代理多台真实的业务处理服务器 , 进行负载均衡 。具体的拓扑图如下:


推荐阅读