千锋教育-做有情怀、有良心、有品质的IT职业教育机构

400-811-9990
当前位置:千锋视频教程 > PHP视频教程  >  网络架构时所说反向代理及正向代理的含义

网络架构时所说反向代理及正向代理的含义

时间:2017-12-29 13:02:25     来源:千锋视频教程 作者:教学部

  当我们讨论网络架构、软件部署的时候,经常提起反向代理,那什么是反向代理呢?既然有反向代理,那什么又是正向代理呢?

PHP知识点 图1

  下面分别介绍一下:

  1、正向代理的概念

  正向代理,也就是传说中的代理,他的工作原理就像一个跳板, 简单的说, 我是一个用户,我访问不了某网站,但是我能访问一个代理服务器 这个代理服务器呢,他能访问那个我不能访问的网站于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容 代理服务器去取回来,然后返回给我

  从网站的角度,只在代理服务器来取内容的时候有一次记录 有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理告不告诉网站

  结论就是 正向代理 是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

  最好的例子就是翻墙。

  2、反向代理的概念

  例用户访问 http://ooxx.me/readme 但ooxx.me上并不存在readme页面 他是偷偷从另外一台服务器上取回来,然后作为自己的内容吐给用户,但用户并不知情。

  这里所提到的 ooxx.me 这个域名对应的服务器就设置了反向代理功能

  结论就是 反向代理正好相反,对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,

  接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容原本就是它自己的一样。

  反向代理服务器位于网站机房一侧,代理网站WEB服务器接收HTTP请求,可在防火墙外部设置代理服务器,作为内容服务器的替身。

  当外部客户机尝试访问内容服务器时,会将其送到代理服务器。实际内容位于内容服务器上,在防火墙内部受到安全保护。

  反向代理服务器作用主要有

  1)安全防护作用。

  2)其还可以缓存静态内容,当静态内容发生变化时,通过内部通知机制通知反向代理服务器缓存失效,需重新加载。

  3)反向代理服务器还可以实现负载均衡。

  3、比较一下正向代理和反向代理

  1)从用途上来讲:

  正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。反向代理的典型用途是将防火墙后面的服务器提供给Internet用户访问。

  反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。

  另外,反向代理还可以启用高级URL策略和管理技术,从而使处于不同web服务器系统的web页面同时存在于同一个URL空间下。

  2)从安全性来讲:

  正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。

  反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。

  3)正向代理:客户端不能直接访问外部的web,必须通过代理服务器访问。

  反向代理:客户端能正常访问外部的web,但是不能直接访问内容服务器。(目标web所在的网络内一台机器充当目标web的代理,客户端直接访问代理就像访问目标web一样)

  二、目前常用的反向代理工具主要有哪些?以及他们之间有什么差异?

  apache,squid,nginx,lighttpd

  反向代理从传输上分可以分为2种:

  1:同步模式(apache/squid)

  同步传输:浏览器发起请求,而后请求会立刻被转到后台,于是在浏览器和后台之间就建立了一个通道。在请求发起直到请求完成,这条通道都是一直存在的。

  2:异步模式(lighttpd/nginx)

  异步传输:浏览器发起请求,请求不会立刻转到后台,而是将请求数据(header)先收到nginx上,然后nginx再把这个请求发到后端,后端处理完之后把数据返回到nginx上,

  nginx将数据流发到浏览器,这点和lighttpd有点不同,lighttpd是将后端数据完全接收后才发送到浏览器。

  小结:apache和squid的反向会增加后端web的负担,因为每个用户请求都会在proxy上与后端server建立的长久链接,知道数据取完前,连接都不会消失。

  因为wan速度与lan速度的不同,虽然lan之间的速度是极度快的,但是用户的wan连接决定了这个时间长。而lighttpd和nginx的异步模式,是不管你用户要求的数据有多大,

  都是先收下来,再与后端联系,这是非常迅速的速度,所以proxy与后端连接时间也会很短,几十M的东西也是几秒内。后端不需要维护这么多连接。

  而lighttpd也和nginx不同的异步,lighttpd是先收完再转向客户浏览器,而nginx是边收数据边转向用户浏览器。

  Nginx和lighttpd基本上是同质的,都是采用基于epoll/kqueue/select的全异步事件模型,可以轻松地维持大量的连接,不惧怕慢连接攻击。两者都提供了丰富的HTTP服务功能,例如压缩、url rewrite、虚拟主机、SSL、proxy等等。

  Nginx大量模仿了apache的设计风格,比如模块的定义、装配、以及配置数据的解析和组织方式等等。Lighttpd则是自己设计的一套。和lighttpd相比,Nginx做事更加精细,它提供的一些比较特别

  Nginx和Lighttpd性能比较:

  根据简单性能对比,Nginx的性能比lighttpd略好。原因可能有以下几方面:

  1. Lighttpd启动了几个辅助线程,有加锁竞争行为,这样会使性能有所降低(线程个数是可配的,这里还有优化的余地);nginx完全不涉及线程,不加锁。

  2. Lighttpd有动态so,nginx全静态编译,动态库执行效率比静态慢大约5%~10%左右。

  3. Nginx在细节优化上可能做得更好一些。例如nginx的epoll是ET(边缘触发)的,而lighttpd的epoll是LT(水平触发)的。

  nginx的性能要好一些,不过对大多数应用来说,lighttpd的性能指标已够用了,一个系统主要的瓶颈往往是在后端。由于lighttpd具有动态模块的加载能力,适合非常需要灵活配置的场合。

  • 北京天丰利校区(总部):北京市海淀区宝盛北里西区28号天丰利商城4层
    北京沙河校区:北京市昌平区沙阳路18号北京科技职业技术学院广场服务楼2层、南区服务楼2层
    咨询电话:400-186-9990 010-82790226-801
    面授课程:全栈HTML5+培训、UI交互设计培训、PHP培训、JavaEE+云数据培训、大数据开发培训、VR/AR混合
    现实培训、Python培训、Linux云计算培训、软件测试培训、Android培训、iOS培训、好程序员
  • 深圳西部硅谷校区地址:深圳市宝安区宝安大道5010号深圳西部硅谷B座A区605-619
    深圳大学城校区地址:深圳市南山区留仙大道1201号大学城创客小镇16栋2楼、3楼
    咨询电话:0755-33582485-801(硅谷校区)0755-86660670-801(大学城校区)
    面授课程:全栈HTML5+培训、UI交互设计培训、PHP培训、JavaEE+云数据培训、Android培训、iOS培训
  • 上海校区地址:上海市宝山区同济支路199号智慧七立方3号楼2-4层
    咨询电话:400-627-7899 021-56166283/56166279
    面授课程:全栈HTML5+培训、UI交互设计培训、JavaEE+云数据培训、Android课程培训、iOS课程培训、好程序员
  • 郑州校区地址:郑州市金水区纬五路21号河南教育学院综合楼(经纬中学楼)7/8层
    咨询电话:0371-55191750 400-186-9990
    面授课程:全栈HTML5+培训、UI交互设计培训、PHP培训、JavaEE+云数据培训、Android课程培训、iOS课程培训
  • 广州校区地址:广州市天河区元岗路310号智汇park创意园E座5层
    咨询电话:020-22119207 400-186-9990
    面授课程:全栈HTML5+培训、JavaEE+云数据培训、Android课程培训、iOS课程培训
  • 大连校区地址:辽宁省大连市甘井子区软件园路2号东软信息学院B5座一楼
    咨询电话:0411-39026086 400-186-9990
    面授课程:全栈HTML5+培训、JavaEE+云数据培训、UI交互设计培训、Android课程培训、iOS课程培训
  • 武汉校区地址:武汉市光谷大道61号智慧园21号楼2层
    咨询电话:027-65523826
    面授课程:全栈HTML5+培训、JavaEE+云数据培训、Android课程培训、iOS课程培训
  • 成都校区地址:成都市武侯区科华北路62号力宝大厦N(北楼)18楼
    咨询电话:028-83178771
    面授课程:全栈HTML5+培训、UI交互设计培训、PHP培训、JavaEE+云数据培训、Android课程培训、iOS课程培训
  • 西安校区地址:西安市雁塔区高新六路52号立人科技C座西区4楼
    咨询电话:029-85260160
    面授课程:全栈HTML5+培训、JavaEE+云数据培训、Android课程培训
  • 杭州校区地址:浙江省杭州市江干区九堡旺田书画城A座4层
    咨询电话:0571-86893632 010-82790226-801
    面授课程:全栈HTML5+培训、JavaEE+云数据培训、Android课程培训、iOS课程培训
  • 青岛校区地址:青岛市市南区金坛路17号青岛职业技术学院南校区实训楼A4层
    咨询电话:0532-80910752/3 010-82790226-801
    面授课程:全栈HTML5+培训、UI交互设计培训、JavaEE+云数据培训、Android课程培训、iOS课程培训
  • 重庆校区地址:重庆市高新区科园一路2号大西洋国际12-1
    咨询电话:023-68883009
    面授课程:JavaEE+云数据课程培训
  • 长沙校区地址:湖南省长沙市岳麓区麓谷企业广场A2栋三单元306号
    咨询电话:0731-85513010/85513210
    面授课程:JavaEE+云数据课程培训
  • 哈尔滨校区地址:哈尔滨市松北区创新一路699号科技创新城19号楼五楼
    咨询电话:15663846969
    面授课程:全栈HTML5+培训
  • 千锋教育服务号

    了解千锋动态
    关注千锋教育服务号

  • 千锋互联服务号

    扫码匿名提建议
    直达CEO信箱